Erneute Frage zu self (tut mir leid ^^)

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
Littlehelp
User
Beiträge: 4
Registriert: Samstag 2. Juni 2018, 22:16

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^^
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

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.
When we say computer, we mean the electronic computer.
Littlehelp
User
Beiträge: 4
Registriert: Samstag 2. Juni 2018, 22:16

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!
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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‽
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten