Anonymer Benutzer
Was machen __init__ und self bei Python?
Ich lerne gerade die Programmiersprache Python und bin auf etwas gestoßen, das ich nicht ganz verstehe.
In einer Methode wie:
def method(self, blah):
def __init__(?):
....
....
Was macht self
? Was soll es sein? Ist es obligatorisch?
Was macht die Methode __init__
? Warum ist sie notwendig? (usw.)
Ich denke, dass es sich um OOP-Konstrukte handeln könnte, aber ich weiß nicht sehr viel.
731
3
In diesem Code:
... steht die Variable
self
für die Instanz des Objekts selbst. Die meisten objektorientierten Sprachen übergeben diese Variable als versteckten Parameter an die für ein Objekt definierten Methoden; Python tut dies nicht. Sie müssen sie explizit deklarieren. Wenn Sie eine Instanz der KlasseA
erzeugen und ihre Methoden aufrufen, wird sie automatisch übergeben, wie in ...Die
__init__
-Methode ist ungefähr das, was in Python einen Konstruktor darstellt. Wenn SieA()
aufrufen, erzeugt Python ein Objekt für Sie und übergibt es als ersten Parameter an die__init__
-Methode. Alle weiteren Parameter (z.B.A(24, 'Hello')
) werden ebenfalls als Argumente übergeben - in diesem Fall wird eine Ausnahme ausgelöst, da der Konstruktor sie nicht erwartet.Ja, Sie haben recht, das sind Oop-Konstrukte.
__init__
ist der Konstruktor für eine Klasse. Der Parameter "self" bezieht sich auf die Instanz des Objekts (wie "this" in C++).Die Methode
__init__
wird aufgerufen, wenn Speicher für das Objekt zugewiesen wird:Es ist wichtig, den
self
-Parameter innerhalb der Methode eines Objekts zu verwenden, wenn Sie den Wert mit dem Objekt aufrechterhalten wollen. Wenn Sie zum Beispiel die__init__
Methode wie folgt implementieren:Die Parameter
x
undy
würden in Variablen auf dem Stack gespeichert und verworfen werden, wenn die init-Methode den Anwendungsbereich verlässt. Das Setzen dieser Variablen alsself._x
undself._y
setzt diese Variablen als Mitglieder desPoint
-Objekts (zugänglich während der Lebensdauer des Objekts).__init__
verhält sich wie ein Konstruktor. Sie müssen "self" an alle Klassenfunktionen als erstes Argument übergeben, wenn Sie wollen, dass sie sich wie nicht-statische Methoden verhalten. "self" sind Instanzvariablen für Ihre Klasse.