Heim > Backend-Entwicklung > Python-Tutorial > Sechs Fragen zu objektorientiertem Python

Sechs Fragen zu objektorientiertem Python

王林
Freigeben: 2023-04-11 20:43:13
nach vorne
1132 Leute haben es durchsucht

Dieser Artikel richtet sich an Freunde, die Python noch nicht kennen, und versucht, die folgenden Fragen zu erklären:

  • Was sind Klassen und Objekte?
  • Da es nun Funktionen gibt, warum brauchen wir Klassen?
  • Wie definiert Python öffentlich? /protected/private attributes/ Ist privat wirklich privat? Wie werden Klassenfunktionen, Mitgliedsfunktionen und statische Funktionen definiert? Wie müssen Unterklassen neu geschrieben werden? Nur die Funktionen der übergeordneten Klasse können verwendet werden, andernfalls wird eine Ausnahme ausgelöst?
  • Es gibt die folgende Vererbungsbeziehung: A, B(A), C(A), D( B,C) Wie lautet dann die Initialisierungsreihenfolge von D?
  • 1 Was sind Klassen und Objekte? . Sie beziehen sich auf Dinge, die beim Handeln oder Denken Ziele sind, oder insbesondere auf die Liebe der anderen Partei. In der Welt der Programmierung sind Objekte die Abbildung von Personen, Dingen, Objekten und anderen Entitäten, die in der objektiven Welt in der Computerlogik existieren.
  • Beim Programmieren können Sie Objekte allem zuordnen, was Sie zuordnen möchten. Wenn die Zuordnung jedoch konventioneller ist, ist der Code einfacher zu verwenden und zu verstehen und erleichtert die anschließende schnelle Iteration und Erweiterung. In der Welt von Python ist alles ein Objekt.

Lassen Sie uns über Klassen sprechen. Klassen sind Klassifizierungsklassen, die eine Sammlung ähnlicher Dinge darstellen und dem Python-Schlüsselwort class entsprechen.

Ein Objekt ist ein bestimmtes Ding in einer Klasse, das nach der Initialisierung der Klasse generiert wird. Es wird normalerweise auch Objekt oder Entität genannt. Beispielsweise ist eine Frau eine Klasse und Ihre Freundin ein Objekt.

Attribut: Eine bestimmte statische Eigenschaft des Objekts, wie z. B. Hautfarbe, ethnische Zugehörigkeit, Blutgruppe usw. Ihrer Freundin.

Funktion: Eine bestimmte dynamische Fähigkeit des Objekts, z. B. kann Ihre Freundin singen, Klavier spielen usw.

Obwohl das angegebene Beispiel möglicherweise nicht angemessen ist, hoffe ich, dass es Ihr Verständnis vertiefen kann. Tatsächlich lautet die genauere Definition wie folgt:

Eine Klasse ist eine Sammlung von Objekten mit denselben Attributen und Funktionen.

2. Warum brauchen wir nun Klassen, um die Wiederverwendung von Code zu lösen, aber wenn sie zu spezifisch sind, wird es auch viele Duplikate geben Spezifisch, also müssen wir immer noch Probleme abstrahieren, und Klassen sind eine Art Abstraktion. Abstrakte Klassen sind leichter wiederverwendbar, einfacher mit komplexer Geschäftslogik umzugehen und verringern auch den Speicherdruck des Programmierers beim Programmieren.

Wenn es keine Klassen gibt, ist es für uns einfacher, einen Berg von Scheißcode zu schreiben, der sich auf den gesamten Körper auswirkt, und es nicht zu wagen, ihn zu ändern. Mit Klassen ist es für uns einfacher, Code zu schreiben, der leicht zu lesen, zu warten und erweiterbar ist. 3. Wie definiert Python öffentliche/geschützte/private Attribute/Methoden?

__ bedeutet privat

_ bedeutet Schutz

Mit Ausnahme der ersten beiden ist es öffentlich

Die sogenannte Konvention bedeutet, dass Sie dies tun sollten, wenn Sie eine Variable oder Methode sehen, die mit einem doppelten Unterstrich oder einem einzelnen Unterstrich beginnt Bewusst nicht außerhalb der Klasse ändern oder darauf zugreifen. Mit anderen Worten: Python hindert Programmierer nicht daran, auf private Eigenschaften oder private Methoden von Klassen zuzugreifen.

Es gibt keinen Unterschied zwischen dem Zugriff auf öffentliche Eigenschaften und dem Zugriff auf private Eigenschaften, Sie müssen Folgendes tun:
    object._ClassName__PrivateMember
    Nach dem Login kopieren
  • 4 Wie werden Klassenfunktionen, Mitgliedsfunktionen und statische Funktionen definiert und welche Funktionen haben sie?
  • Siehe die Kommentare:
  • rrree
  • Die Klassenfunktion ist mit @classmethod dekoriert. Der erste Parameter muss cls sein, was bedeutet, dass wir den Klassenkonstruktor cls() in der classmethod-Funktion aufrufen können eine neue Instanz generieren. Von diesem Punkt aus können wir seine Verwendungsszenarien ableiten:

Wenn wir den Konstruktor erneut aufrufen müssen, also beim Erstellen eines neuen Instanzobjekts

Wir müssen eine neue Instanz zurückgeben, ohne die vorhandene Instanz zu ändern.

Member-Funktionen sind sehr verbreitet, es handelt sich um Methoden, die direkt von einem Objekt aufgerufen werden können. Der erste Parameter muss self sein.

Statische Funktion, dekoriert mit @staticmethod, bedeutet normalerweise, dass die Berechnung dieser Funktion keine Klassenvariablen umfasst und ohne Instanziierung der Klasse verwendet werden kann. Mit anderen Worten, die Beziehung zwischen der Funktion und dieser Klasse ist nicht sehr eng. Mit anderen Worten: Mit staticmethod dekorierte Funktionen können auch außerhalb der Klasse definiert werden. Manchmal habe ich Schwierigkeiten, ob ich „staticmethod“ in einer Klasse verwenden oder eine separate Funktion in „utils.py“ schreiben soll.

5. Wie man Unterklassen erstellt, muss die Funktion der übergeordneten Klasse neu schreiben, sonst wird eine Ausnahme ausgelöst.
  • Zwei Methoden werden empfohlen.
  • Erster Typ:
  • class Document():
    
    WELCOME_STR = 'Welcome! The context for this book is {}.'
    
    def __init__(self, title, author, context):
    print('__init__函数被调用')
    self.title = title
    self.author = author
    self.__context = context
    
    #类函数
    @classmethod
    def create_empty_book(cls, title, author):
    return cls(title=title, author=author, context='nothing')
    
    # 成员函数
    def get_context_length(self):
    return len(self.__context)
    
    # 静态函数
    @staticmethod
    def get_welcome(context):
    return Document.WELCOME_STR.format(context)
    empty_book = Document.create_empty_book('What Every Man Thinks About Apart from Sex', 'Professor Sheridan Simove')
    print(empty_book.get_context_length())
    print(empty_book.get_welcome('indeed nothing'))
    Nach dem Login kopieren
Zweiter Typ:

class A:
def fun(self):
raise Exception("not implement")
class B(A):
pass

b = B()
b.fun()
Nach dem Login kopieren

6 Es gibt die folgende Vererbungsbeziehung: A, B(A), C(A), D(B,C) Dann, wenn D initialisiert wird, A, Was Ist die Initialisierungsreihenfolge von B und C? Wird A zweimal initialisiert? Wie lautet die Initialisierungsreihenfolge von A, B und C?

Es gibt zwei Möglichkeiten: Die erste Methode A wird zweimal initialisiert, die zweite nicht.

Erster Typ:

from abc import ABCMeta,abstractmethod
class A(metaclass = ABCMeta):
@abstractmethod
def fun(self):
pass
class B(A):
pass

b = B()
b.fun()
Nach dem Login kopieren

Ausgabe:

---> B---
A--->D
---> C---
Nach dem Login kopieren

Zweiter Typ:

class A:
def __init__(self):
print("A is called")class B(A):
def __init__(self):
print("B is called")
A.__init__(self)class C(A):
def __init__(self):
print("C is called")
A.__init__(self)class D(B,C):
def __init__(self):
print("D is called")
B.__init__(self)
C.__init__(self)

d = D()
Nach dem Login kopieren

Ausgabe;

enter D
enter B
enter C
enter A
levave A
levave C
levave B
levave D
Nach dem Login kopieren

第一种方法非常明确的表明了菱形继承潜在的问题:一个基类的初始化函数可能被调用两次。在一般的工程中,这显然不是我们所希望的。

正确的做法应该是使用 super 来召唤父类的构造函数,而且 python 使用一种叫做方法解析顺序的算法(具体实现算法叫做 C3),来保证一个类只会被初始化一次。

也就是说,能用 super,就用 super。

Das obige ist der detaillierte Inhalt vonSechs Fragen zu objektorientiertem Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage