Python100Days Studie stellt fest --- Tag8 die Grundlage der objektorientierten Programmierung

Objektorientierte Programmierung Grundlagen
in dem Moment Programmierer leben sollte „objektorientierte Programmierung“ zu hören ist, oft jemand gefragt , ob er den nächsten Satz verwenden könnte , was zu erklären , „objektorientierte Programmierung,“ wir einen Blick auf einer formellen Erklärung nehmen .

„Um einen Satz von Datenstrukturen und Verfahren zur Verarbeitung dieser Gegenstand (Objekt), das Objekt mit dem gleichen Verhalten in Klassen (Klasse) gruppiert, verstecken die internen Details von Klasse Einkapselung (Verkapselung), Spezialisierung Klasse durch Vererbung (Inheritance) erreichen (Vertiefung) und Verallgemeinerung (Generalisierung), basierend auf dem dynamischen Objekttyp durch Polymorphismus Zuweisen (Polymorphismus). "

So ist es nicht besser, nicht verstehen. Also haben wir ein benutzerfreundlicher zu sagen, schauen, wissen das folgende Stück Inhalt von fast.

Hier hat Bild einfügen Beschreibung

Beschreibung : Der oben genannte Inhalt aus dem Netz, repräsentiert nicht die Ansichten und Meinungen des Autors und den Autor selbst Lichangwuguan, nicht verantwortlich Hilfe Autoren übernehmen.

Bevor wir das „ Programm eine Reihe von Anweisungen ist “ , schreiben wir in der Programmanweisung ausgeführt wird , und schaltet dann auf einen oder mehrere Befehle von der CPU ausgeführt. Natürlich, um den Design - Prozess zu vereinfachen, haben wir das Konzept der Funktion, die unabhängig und oft Code in Funktion wiederverwendet, die Notwendigkeit , diese Funktionen nutzen kann einfach anrufen funktionieren, wenn eine Funktion zu komplex und umständlich Funktion können wir auf Funktion segmentiert weiter in Teilfunktionen weiterhin die Komplexität des Systems zu reduzieren. Having said that, ich weiß nicht jedoch wissen , ob wir , dass die so genannte Programmierung finden , ist die Art und Weise ein Computerprogrammierer in Übereinstimmung mit dem Steuercomputer erfülle diversen Aufgaben zu arbeiten. Allerdings denkt , wie ein Computer mit einem normalen Menschen ist anders, wenn das Programm würde normale menschliche Denkweise gerecht zu werden auf den Computer verlassen muß, den Spaß viel weniger „ jede Programmierung lernen sollte“ solche Rhetorik wir können nur darüber reden. Natürlich sind sie nicht das wichtigste, das Wichtigste ist , wenn wir ein komplexes System entwickeln müssen, wird die Komplexität der Arbeit entwickeln und den Code halten wird schwierig, so in den späten 1960er Jahren, die „Software - Krise“ eine Reihe von Konzept „Software Engineering“ , begann in der Branche zu erscheinen.

Natürlich wissen die Menschen in den Kreis der Programmierer, dass in Wirklichkeit ist es nicht das oben erwähnte „Königsweg“, um diese Fragen zu lösen, die eigentlichen Software-Entwickler, die die Geburt der 70er Jahre des letzten Jahrhunderts Smalltalk Programmiersprache sehen wollen eingeführt Objektorientierte Programmierung Ideen (objektorientierte Programmierung können zurück zu einem frühen Prototyp von Simula Sprache verfolgt werden). Nach diesem Konzept der Programmierung, funktionalen Programmierdaten und Betriebsdaten sind ein logisches Ganze, das wir „Objekt“ nennen, und die Art, wie wir Probleme lösen, Objekte und Objekt zu erstellen, eine Vielzahl von Anforderungen zur Ausgabe von Nachrichten, ermöglicht kollaboratives Arbeiten mehrerer Objekte letztlich uns, komplexe Systeme zu konstruieren, reale Probleme zu lösen.

Beschreibung : Natürlich nicht objektorientierte Software - Entwicklung ist es, alle die Probleme des letzten „Königsweg“ zu lösen, so die heutige High-Level - Programmiersprache Unterstützung Paradigmen für fast alles mehr Programmierung bietet, Python ist keine Ausnahme.

Klassen und Objekte
Einfach ausgedrückt, ist die Klasse ein Entwurf und Vorlagenobjekte und Objekte sind Instanzen von Klassen. Obwohl diese Erklärung Art wie das Konzept in der Auslegung des Begriffs war, aber zumindest können wir aus dieser Aussage sehen, ist die Klasse ein abstraktes Konzept, sondern das Objekt eine bestimmte Sache. In der objektorientierten Programmierung Welt ist alles, was ein Objekt ist , das Objekt hat Attribute und Verhalten jeden Objekt ist einzigartig, und das Objekt muss zu einer bestimmten Kategorie (Typ) gehört. Wenn wir die statische Charakteristik (Eigenschaft) gesetzt hat viele gemeinsame Merkmale von Objekten und dynamischen Eigenschaften (Verhalten) extrahiert werden , können Sie einen Namen „Klasse“ Ding definieren.

Hier hat Bild einfügen Beschreibung

Definierten Klassen
können Klasse Klasse Schlüsselwort in Python, definieren , und dann durch die zuvor definierten Klasse Methodenfunktion untersucht, so dass die Dynamik des Objektmerkmale können den Code wie folgt beschreiben.

class Student(object):

    # __init__是一个特殊方法用于在创建对象时进行初始化操作
    # 通过这个方法我们可以为学生对象绑定name和age两个属性
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def study(self, course_name):
        print('%s正在学习%s.' % (self.name, course_name))

    # PEP 8要求标识符的名字用全小写多个单词用下划线连接
    # 但是部分程序员和公司更倾向于使用驼峰命名法(驼峰标识)
    def watch_movie(self):
        if self.age < 18:
            print('%s只能观看《熊出没》.' % self.name)
        else:
            print('%s正在观看岛国爱情大电影.' % self.name)

Beschreibung : Schreibfunktionen in der Klasse, wir in der Regel eine Methode aufrufen (das Objekt), das Ziel dieser Verfahren ist , dass Nachrichten empfangen werden können.

Erstellen und Verwenden von Objekten
, wenn wir eine gute Klasse definieren, können Sie Objekte auf folgende Weise erstellen und geben Sie eine Nachricht auf dem Objekt.

def main():
    # 创建学生对象并指定姓名和年龄
    stu1 = Student('骆昊', 38)
    # 给对象发study消息
    stu1.study('Python程序设计')
    # 给对象发watch_av消息
    stu1.watch_movie()
    stu2 = Student('王大锤', 15)
    stu2.study('思想品德')
    stu2.watch_movie()


if __name__ == '__main__':
    main()

Besuchen Sie das Sichtbarkeitsproblem
für den obigen Code, C ++, Java, C # und andere Erfahrung Programmierung Programmierer fragen uns an Studenten Objekt gebunden Namen und das Alter haben Eigentum am Ende , welche Art von Zugang (auch Sichtbarkeit genannt). Da in vielen objektorientierten Programmiersprachen, werden wir in der Regel Ziel Eigentum an privaten (privat) gesetzt ist oder geschützt (geschützt), einfach ausgedrückt, ist nicht die Außenwelt zugreifen darf, während das Verfahren des Objekts in der Regel öffentlich ist ( public), weil das offenbarte Verfahren ist , dass Objekte Nachricht akzeptieren. In Python, Zugriff auf die Eigenschaften und Methoden von nur zwei, die öffentlichen und privaten ist, wenn Sie die Eigenschaft Privateigentum im Namen als zwei Unterstrichen beginnen zu verwenden mögen, können Sie der folgende Code dies überprüfen.

class Test:

    def __init__(self, foo):
        self.__foo = foo

    def __bar(self):
        print(self.__foo)
        print('__bar')


def main():
    test = Test('hello')
    # AttributeError: 'Test' object has no attribute '__bar'
    test.__bar()
    # AttributeError: 'Test' object has no attribute '__foo'
    print(test.__foo)


if __name__ == "__main__":
    main()

Allerdings ist Python nicht streng privat Eigenschaft oder eine Methode aus der Grammatik garantieren, nur um es private Eigenschaften und Methoden einer Namensänderung zu behindern den Zugang zu ihnen gibt in der Tat, den Namen ändern, wenn Sie die Regeln nach wie vor Zugang zu wissen sie kann der folgende Code dies überprüfen. Der Grund für diese Einstellung kann durch eine solche berühmten Ausspruch erklärt werden, dass „Wir sind alle Erwachsenen hier zustimmenden“. Da die meisten Programmierer denken besser offen als geschlossen, und Programmierer, die für ihr eigenes Verhalten.

class Test:

    def __init__(self, foo):
        self.__foo = foo

    def __bar(self):
        print(self.__foo)
        print('__bar')


def main():
    test = Test('hello')
    test._Test__bar()
    print(test._Test__foo)


if __name__ == "__main__":
    main()

In der tatsächlichen Entwicklung, empfehlen wir nicht die Eigenschaft privat, weil es zu einer Unterklasse kann keinen Zugriff führen würde (wird später erwähnt). So ist die meist Python-Programmierer wird eine Namenskonvention ist ein einzelner Attributname mit einem Unterstrich beginnen, damit die Eigenschaft darzustellen geschützt ist, diesen Code außerhalb der Klasse während eines Besuchs in die Eigenschaft, die vorsichtig bleiben soll. Diese Praxis ist nicht grammatische Regeln, ein Unterstrich die Eigenschaften und Methoden der Außenwelt noch zugänglich ist, so desto öfter es ist eine Metapher oder impliziert, in diesem Punkt, den ich auf der „Python aussehen kann - die Jahre wir traten auf dieser Grube „-Artikel zu erklären.

Objektorientierte Strebe
objektorientierten drei Säulen: Einkapselung, Vererbung und Polymorphismus. Die beiden letztgenannten Begriffe im nächsten Kapitel eine detaillierte Erklärung, hier lassen Sie uns darüber reden , was ist das Paket. Mein eigenes Verständnis des Pakets ist „alle versteckten Implementierungsdetails, Freilegung nur ( zur Verfügung stellen) eine einfache Programmierschnittstelle zur Außenwelt.“ Wir in der Tat, in der in der Klasse definierte Methode verkapselt die Daten und Operationen an den Daten auf, nachdem wir ein Objekt erstellen, nur ein Objekt eine Nachricht geben (Aufruf eine Methode) Methode des Codes, dass wir werden ausgeführt sendet nur müssen Sie den Namen und die eingehenden Methodenparameter (Außenansicht Methode) kennen, ohne die Notwendigkeit , die internen Implementierungsdetails des Verfahrens (interne Ansicht des Verfahrens) zu kennen.

Übung 1: definieren eine Klasse beschreibt Digitaluhr.

from time import sleep


class Clock(object):
    """数字时钟"""

    def __init__(self, hour=0, minute=0, second=0):
        """初始化方法

        :param hour: 时
        :param minute: 分
        :param second: 秒
        """
        self._hour = hour
        self._minute = minute
        self._second = second

    def run(self):
        """走字"""
        self._second += 1
        if self._second == 60:
            self._second = 0
            self._minute += 1
            if self._minute == 60:
                self._minute = 0
                self._hour += 1
                if self._hour == 24:
                    self._hour = 0

    def show(self):
        """显示时间"""
        return '%02d:%02d:%02d' % \
               (self._hour, self._minute, self._second)


def main():
    clock = Clock(23, 59, 58)
    while True:
        print(clock.show())
        sleep(1)
        clock.run()


if __name__ == '__main__':
    main()

Beschreibt eine Klasse Methode definierte Punkt in einer Ebene und bieten mobile computing und Punkt zu Punkt Abstand: 2-Übungen.

from math import sqrt


class Point(object):

    def __init__(self, x=0, y=0):
        """初始化方法
        
        :param x: 横坐标
        :param y: 纵坐标
        """
        self.x = x
        self.y = y

    def move_to(self, x, y):
        """移动到指定位置
        
        :param x: 新的横坐标
        "param y: 新的纵坐标
        """
        self.x = x
        self.y = y

    def move_by(self, dx, dy):
        """移动指定的增量
        
        :param dx: 横坐标的增量
        "param dy: 纵坐标的增量
        """
        self.x += dx
        self.y += dy

    def distance_to(self, other):
        """计算与另一个点的距离
        
        :param other: 另一个点
        """
        dx = self.x - other.x
        dy = self.y - other.y
        return sqrt(dx ** 2 + dy ** 2)

    def __str__(self):
        return '(%s, %s)' % (str(self.x), str(self.y))


def main():
    p1 = Point(3, 5)
    p2 = Point()
    print(p1)
    print(p2)
    p2.move_by(-1, 2)
    print(p2)
    print(p1.distance_to(p2))


if __name__ == '__main__':
    main()
Veröffentlicht 124 Originalarbeiten · erntete Lob 141 · Ansichten 160 000 +

Ich denke du magst

Origin blog.csdn.net/weixin_36838630/article/details/105206478
Empfohlen
Rangfolge