self in Klassen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Luecx
User
Beiträge: 15
Registriert: Dienstag 4. März 2014, 12:16

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
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.
Luecx
User
Beiträge: 15
Registriert: Dienstag 4. März 2014, 12:16

ich hab aber auch das gesehen : self.irwas , was bringt mir das denn?
Sirius3
User
Beiträge: 18309
Registriert: Sonntag 21. Oktober 2012, 17:20

@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".
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.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Luecx
User
Beiträge: 15
Registriert: Dienstag 4. März 2014, 12:16

achsooooooo :) vielen dank für die antworten !:)
Antworten