Selbst bedeutet „selbst“. In Python stellt es eine Instanz einer Klasse dar, keine Klasse. Self kann nur in Klassenmethoden gefunden werden. Bei der Definition von Klassenmethoden muss kein Self vorhanden sein. Der Name „Selbst“ ist nicht notwendig. Sie können ihn als „a“ oder „b“ oder als einen beliebigen anderen Namen definieren, aber er ist konventionell und kann die Schwierigkeit des Verstehens verringern.
Zuerst müssen wir verstehen, warum das Wort self in Python-Klassen verwendet wird. Warum nicht Namen wie „zhangsan“ und „lisi“ verwenden? das muss seine Absicht sein.
self stellt eine Instanz einer Klasse dar, keine Klasse.
class Test: def prt(self): print(self) print(self.__class__) t = Test() t.prt()
Das Ausführungsergebnis ist wie folgt:
<__main__.Test object at 0x000000000284E080> <class '__main__.Test'>
Aus dem obigen Beispiel ist offensichtlich, dass self eine Instanz einer Klasse darstellt. Und self.class zeigt auf die Klasse.
Der erste Parameter der Methode in der Klasse muss self sein, sonst kann die Instanz die Methode in der Klasse nicht korrekt aufrufen. Das heißt, wenn der erste Parameter in der Methode nicht self ist (im Großen und Ganzen). Sinn), dann hat diese Methode keinen Wert, weil die Instanz sie nicht aufrufen kann. Ich weiß wirklich nicht, welchen Nutzen eine Methode hat, die nicht aufgerufen werden kann.
Hinweis: Ersetzen Sie self durch this. Das Ergebnis ist das gleiche, aber es ist am besten, das herkömmliche self in Python zu verwenden.
Beim Erben ist die übergebene Instanz die übergebene Instanz, nicht die Instanz der Klasse, in der self definiert ist.
class Parent: def pprt(self): print(self) class Child(Parent): def cprt(self): print(self) c = Child() c.cprt() c.pprt() p = Parent() p.pprt()
Die Ausführungsergebnisse lauten wie folgt:
<__main__.Child object at 0x0000000002A47080> <__main__.Child object at 0x0000000002A47080> <__main__.Parent object at 0x0000000002A47240>
Erklärung:
Es sollte keine Verständnisprobleme geben, wenn c.cprt() ausgeführt wird, was sich auf an bezieht Instanz der Child-Klasse.
Aber wenn c.pprt() ausgeführt wird, entspricht es Child.pprt(c), sodass self immer noch auf eine Instanz der Child-Klasse verweist, da die pprt()-Methode nicht in self definiert ist. Vererbung wird vererbt Als ich den Baum durchsuchte, stellte ich fest, dass die pprt()-Methode in der übergeordneten Klasse Parent definiert ist und daher erfolgreich aufgerufen wird
Das obige ist der detaillierte Inhalt vonPython-Selbst was bedeutet das?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!