Art
1. Definieren Sie eine Klasse
Das Syntaxformat der Klassendefinition ist wie folgt:
class ClassName: <statement-1> . . . <statement-N>
Eine Klasse besteht manchmal auch aus Attributen und Methoden Wenn wir eine Klasse definieren, müssen wir die Attribute der Klasse festlegen. Dazu ist der Konstruktor erforderlich.
Der Konstruktor der Klasse lautet wie folgt:
def __init__(self,[...):
Die Klasse ist definiert Init()-Methode, der Instanziierungsvorgang der Klasse ruft automatisch die init()-Methode auf.
Wenn der Konstruktor dann dem Destruktor entspricht, können wir beim Erstellen einer Klasse natürlich den Konstruktor zum Festlegen von Eigenschaften verwenden. Wenn eine Klasse zerstört wird, wird der Destruktor aufgerufen.
Die Syntax des Destruktors lautet wie folgt:
def __del__(self,[...):
Kinder, die genau hinsehen, werden feststellen, dass es einen besonderen Unterschied zwischen Klassenmethoden und gewöhnlichen Funktionen gibt. Sie müssen einen zusätzlichen ersten Parameternamen haben. , laut Konvention lautet sein Name self.
Was repräsentiert also das Selbst?
Wir können uns Beispiele ansehen und die Antwort anhand von Beispielen herausfinden:
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- class Test: def prt(self): print(self) print(self.__class__) t = Test() t.prt()
Beobachten Sie die Ausgabeergebnisse:
Es ist deutlich aus den Ausführungsergebnissen ersichtlich, self stellt eine Instanz einer Klasse dar, gibt die Adresse des aktuellen Objekts aus und self.__class__ zeigt auf die Klasse.
Natürlich ist self kein Python-Schlüsselwort, was bedeutet, dass es normal ausgeführt werden kann, wenn wir es durch andere Zeichen ersetzen. Es ist nur so, dass wir es gewohnt sind, self
2 zu verwenden. Historische Probleme in Python, die Klassen definieren
Python In der Iteration der Version gibt es ein historisches Problem mit Klassen, nämlich das Problem mit Klassen neuen und alten Stils. Schauen Sie sich insbesondere den folgenden Code an:
#!/usr/bin/env python # -*- coding: UTF-8 -*- # 旧式类 class OldClass: pass # 新式类 class NewClass(object): pass
Wie Sie sehen können, Hier werden verschiedene der beiden verwendet. Sie können sehen, dass der größte Unterschied darin besteht, dass die Klasse im neuen Stil die Objektklasse erbt. Natürlich ist es am besten, die Klasse im neuen Stil zu definieren. Dieses Problem besteht in Python3 nicht, da Python3 Alle Klassen in sind Klassen neuen Stils.
Was ist also der Unterschied zwischen Klassen im neuen Stil und Klassen im alten Stil?
Führen Sie den folgenden Code aus:
#!/usr/bin/env python # -*- coding: UTF-8 -*- # 旧式类 class OldClass: def __init__(self, account, name): self.account = account; self.name = name; # 新式类 class NewClass(object): def __init__(self, account, name): self.account = account; self.name = name; if __name__ == '__main__': old_class = OldClass(111111, 'OldClass') print(old_class) print(type(old_class)) print(dir(old_class)) print('\n') new_class=NewClass(222222,'NewClass') print(new_class) print(type(new_class)) print(dir(new_class))
Beobachten Sie die Ausgabeergebnisse sorgfältig und vergleichen Sie sie. Beachten Sie, dass die Ausgabeergebnisse in Python3 genau gleich sind . Weil es in Python3 kein Problem zwischen Klassen im neuen Stil und Klassen im alten Stil gibt.