Seite 1 von 1

Erneute Frage zu self (tut mir leid ^^)

Verfasst: Sonntag 3. Juni 2018, 20:24
von Littlehelp
Hallo nochmal Liebes Forum,

gestern hatte ich ein kleines Problem zum befehl "self"
Ich hatte vergessen, eine Instanz meiner Klasse zu erstellen. Nachdem ich dies nun getan hatte, funktionierte es auch.
Merkwürdig ist nun allerdings, dass genau das selbe Programm, was gestern noch Funktionierte, nun nicht mehr funktioniert und ich habe absolut keine Ahnung woran das liegen könnte.

Der Code:

Code: Alles auswählen

class Wand():

        def __init__(self, color="blau"):
                self.c=color

        def Farbe(self):
                return self.c

A = Wand
A.Farbe()
Vielen Dank^^

Re: Erneute Frage zu self (tut mir leid ^^)

Verfasst: Sonntag 3. Juni 2018, 20:28
von sls
Was funktioniert nicht? Wenn du ein Objekt initialisieren willst, musst du die Klasse auch dementsprechend mit Klammern aufrufen: A = Wand()

Außerdem: Funktionen in Python werdenn klein_mit_unterstrich geschrieben. `A` ist kein vernünftiger Objekt / Variablenname, man sollte hier eine Bezeichnung wählen die eher wieder gibt, wofür das Objekt gut sein soll, auch wenn es in diesem Beispiel offensichtlich ist. Objekte sollten ebenfalls klein geschrieben werden.

Re: Erneute Frage zu self (tut mir leid ^^)

Verfasst: Sonntag 3. Juni 2018, 20:34
von Littlehelp
Oh je, ich bin auch echt blöd ^^
Warum er das allerdings nicht speicherte Gestern weiß ich nicht.
Vielen Dank für die schnelle Antwort!

Re: Erneute Frage zu self (tut mir leid ^^)

Verfasst: Sonntag 3. Juni 2018, 20:41
von __blackjack__
@Littlehelp: Das hat gestern sicher nicht ”funktioniert”. Du erstellst kein Exemplar von `Wand` sondern bindest die Klasse nur zusätzlich an den Namen `A` und rufst dann `Farbe()` auf der Klasse auf. Was genau aus dem gleichen Grund wie letztes mal nicht funktioniert: Die Methode muss auf einem Exemplar aufgerufen werden. Dazu musst Du `Wand` *aufrufen*.

Das nächste Problem ist dann, dass Du mit dem Rückgabewert des Methodenaufrufs nichts machst. Da fehlt eventuell noch ein `print()`‽

Zudem gilt, genau wie letztes mal, das Namen für Objekte ausser Klassen und Konstanten in Kleinbuchstaben geschrieben werden sollten, also in diesem Fall `A` und `Farbe`. Abkürzungen (`A`, `c`) sind immer noch doof, und so triviale „Getter“ wie `Farbe()` schreibt man in Python nicht. Da würde man einfach auf das Attribut zugreifen.

Code: Alles auswählen

class Wand(object):

    def __init__(self, color='blue'):
            self.color = color


wand = Wand()
print(wand.color)
Und ich weiss nicht ob das beim letzten mal richtig rübergekommen ist: Wand heisst auf Deutsch Zauberstab. Vielleicht wolltest Du die Klasse doch eher `Wall` nennen‽