self
ist unvermeidlich.
Es gab gerade eine Frage, ob self
implizit oder explizit sein sollte. Guido van Rossum
hat diese Frage beantwortet und gesagt self
muss bleiben.
Also wo lebt das self
?
Wenn wir uns nur auf die funktionale Programmierung beschränken würden, bräuchten wir kein self
. Sobald wir zur Python OOP übergehen, finden wir dort self
.
Hier ist der typische Anwendungsfall Klasse C
mit der Methode m1
class C:
def m1(self, arg):
print(self, ' innen')
pass
ci =C()
print(ci, ' außen')
ci.m1(None)
print(hex(id(ci))) # hex memory address
Dieses Programm wird folgendes ausgeben:
<__main__.C object at 0x000002B9D79C6CC0> außen
<__main__.C object at 0x000002B9D79C6CC0> innen
0x2b9d79c6cc0
Also hält self
die Speicheradresse der Klasseninstanz. Der Zweck von self
wäre, den Verweis für Instanzmethoden zu halten und uns einen expliziten Zugriff auf diesen Verweis zu ermöglichen.
Beachten Sie, dass es drei verschiedene Arten von Klassenmethoden gibt:
- statische Methoden (lesen: Funktionen),
- Klassenmethoden,
- Instanzmethoden (erwähnt).