Was Bedeutet das (self) Befehl in Python?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

"self" ist kein Befehl, sondern ein Name. Nämlich der Name, der innerhalb einer Klasse für eben diese Klasse verwendet wird. Dieser wird in der __init__ Funktion festgelegt. Standardmäßig schreibt man:

def __init__(self):

Damit sagst du Python, dass du innerhalb der Klasse ebendiese mit "self" ansprechen möchtest. Initialisierst du mit

def __init__(meineOma):

dann heißt deine Klasse intern "meineOma".

Wozu braucht man self? Eine Klasse ist ja sowas wie ein Bauplan. In der Klasse werden Funktionen (sog. Methoden) erstellt, die den Aufbau des Bauplans bestimmen. Später willst du dann den Bauplan in ein existierendes Objekt überführen. Bleiben wir mal beim Beispiel "Bauplan" und lass uns ein Haus bauen.

class Haus:
def __init__(self, hoehe, breite, laenge)

Innerhalb der Klasse "Haus" gibst du mit "self" an, dass du dich auf den Bauplan beziehst.

self.hoehe = hoehe
self.breite = breite
self.laenge = laenge
self.volumen = self.hoehe * self.breite * self.laenge

Der Bauplan selbst erstellt noch kein Haus. Er beschreibt lediglich den Aufbau eines Hauses, also die generelle Idee des Hauses. Bauen kannst du, indem du eine Instanz der Klasse erstellst:

meinHaus = Haus(hoehe=7, breite=12, laenge=15)

Damit baust du ein Haus mit Höhe 7, Breite 12, Länge 15. Möchtest du das Volumen des Hauses wissen, kannst du das erfragen mit

print(meinHaus.volumen)

Du siehst: aus "self.volumen" wird "meinHaus.volumen". Self heißt es nur INNERHALB der Klasse, damit Python weiß, dass es sich auf die eigene Klasse bezieht. Später greifst du die Variable von außen auf, indem du das konkrete Objekt benennst. Du könntest schließlich auch mehrere Häuser bauen:

meinHaus2 = Haus(...)
meinHaus3 = Haus(...)

und dann erfährst du das jeweilige Volumen über

meinHaus2.volumen = ...
meinHaus3.volumen = ...

Prinzipiell sollest du etwas genauer deine Frage spezifizieren...

Ich bin nicht wirklich erfahren mit Python, bisher habe ich aber self immer dann benötigt, wenn ein Objekt mit seinen Memberfunktionen auf seine Membervariablen zugreifen sollte. self dürfte da eine Referenz auf das eigene Objekt sein.

Zitat: " Technically both self and this are used for the same thing. They are used to access the variable associated with the current instance. Only difference is, you have to include self explicitly as first parameter to an instance method in Python, whereas this is not the case with Java. Moreover, the name self can be anything. It's not a keyword, as you already know. you can even change it to this, and it will work fine. But people like to use self, as it has now become a bit of a convention."

Quelle: https://stackoverflow.com/questions/21694901/difference-between-python-self-and-java-this

Wenn man dem Typ also glauben darf kannst du das mit this vergleichen. Dann dürfte ja wohl alles klar sein.