Seite 1 von 1
self in Klassen
Verfasst: Sonntag 20. April 2014, 13:41
von Luecx
Hallo liebes Forum,
ich bin momentan dabei mich bisschen in die classes einzuarbeiten doch ich beiße da leider auf granit. keine seite im internet kann es gut erklären also hoffe ich das mir jemand helfen kann.
an sich weiß ich wie classes funktionieren doch wofür braucht man dieses self, also wenn man was übergeben will muss man immer self benutzen, und an sich, was macht das self?
mfg. Luecx
Re: self in Klassen
Verfasst: Sonntag 20. April 2014, 13:52
von BlackJack
@Luecx: `self` ist das erste Argument von Methoden und beim Aufruf wird dort das Objekt übergeben auf dem die Methode aufgerufen wurde. Sonst könnte man in der Methode auf das Objekt nicht zugreifen.
Re: self in Klassen
Verfasst: Montag 21. April 2014, 11:54
von Luecx
ich hab aber auch das gesehen : self.irwas , was bringt mir das denn?
Re: self in Klassen
Verfasst: Montag 21. April 2014, 12:12
von Sirius3
@Luecx: self ist das Objekt auf dem die Methode aufgerufen wurde. Wenn Du innerhalb der Methode also auf Attribute zugreifen willst, oder andere Methoden aufrufen willst, dann mußt Du Python sagen, in welchem Objekt es das Attribut findet, und das sagt genau die Notation "self.irgendwas": suche das Attribut "irgendwas" im Objekt "self".
Re: self in Klassen
Verfasst: Montag 21. April 2014, 12:13
von BlackJack
@Luecx: Ich verstehe die Frage nicht. Das ”bringt” Dir, dass Du auf das `irwas`-Attribut des Objekts zugreifst was an den Namen `self` gebunden ist. Also wenn das in einer Methode steht und das erste Argument `self` heisst, greifst Du damit auf das `irwas`-Attribut des Objekts zu, auf dem diese Methode aufgerufen wird.
Re: self in Klassen
Verfasst: Montag 21. April 2014, 15:09
von mutetella
@Luecx
Mir hat auch die Info geholfen, dass `self` erstmal nur ein Name für das Argument ist, dem die Klasseninstanz, also die zum Leben erweckte Klasse, übergeben wird. Man könnte statt dem Namen 'self' auch 'instance' oder 'obj' oder 'hubert' verwenden. 'self' ist also nicht in der Pythonsyntax an sich verankert, sondern entspricht der Konvention, die in diesem Fall auch unbedingt eingehalten werden muss. Lediglich die Regel, dass die Instanz (das Exemplar) der Klasse immer als erstes Argument automatisch an eine Klassenmethode übergeben wird, ist von Python bestimmt.
Die folgenden 'non-self' Beispiele sollen das nur veranschaulichen und niemals so verwendet werden!!
Code: Alles auswählen
>>> class AnyClass(object):
... def __init__(first, second, third):
... self = first
... self.second = second
... self.third = third
...
>>> daft = AnyClass(second=2, third=3)
>>> daft.second
2
>>> daft.third
3
>>> class AnotherClass(object):
... def __init__(instance, foo, bar):
... instance.foo = foo
... instance.bar = bar
... def get_instance(instance):
... return instance
...
>>> daft = AnotherClass('foo', 'bar')
>>> daft.foo
'foo'
>>> daft.bar
'bar'
>>> id(daft) == id(daft.get_instance())
True
Du siehst also, 'self' ist lediglich ein zur Konvention gewordener Name. Nochmals: Auf keinen Fall eigene Wege gehen!
mutetella
Re: self in Klassen
Verfasst: Freitag 25. April 2014, 11:10
von Luecx
achsooooooo

vielen dank für die antworten !:)