Die Antwort in wenigen Worten
In Ihrem Beispiel itsProblem
handelt es sich um eine lokale Variable.
Sie müssen verwenden self
, um Instanzvariablen festzulegen und abzurufen. Sie können es in der __init__
Methode einstellen . Dann wäre Ihr Code:
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Wenn Sie jedoch eine echte Klassenvariable wünschen, verwenden Sie den Klassennamen direkt:
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
print (Example.itsProblem)
Aber seien Sie vorsichtig mit dieser, da sie theExample.itsProblem
automatisch gleich gesetzt wird Example.itsProblem
, aber überhaupt nicht dieselbe Variable ist und unabhängig geändert werden kann.
Einige Erklärungen
In Python können Variablen dynamisch erstellt werden. Daher können Sie Folgendes tun:
class Example(object):
pass
Example.itsProblem = "problem"
e = Example()
e.itsSecondProblem = "problem"
print Example.itsProblem == e.itsSecondProblem
druckt
Wahr
Genau das machen Sie also mit den vorherigen Beispielen.
In Python verwenden wir zwar self
als this
, aber es ist ein bisschen mehr als das. self
ist das erste Argument für eine Objektmethode, da das erste Argument immer die Objektreferenz ist. Dies erfolgt automatisch, unabhängig davon, ob Sie es anrufen self
oder nicht.
Was bedeutet, dass Sie Folgendes tun können:
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
oder:
class Example(object):
def __init__(my_super_self):
my_super_self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Es ist genau das gleiche. Das erste Argument einer beliebigen Objektmethode ist das aktuelle Objekt. Wir nennen es nur self
eine Konvention. Und Sie fügen diesem Objekt nur eine Variable hinzu, so wie Sie es von außen tun würden.
Nun zu den Klassenvariablen.
Wenn Sie das tun:
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Sie werden feststellen, dass wir zuerst eine Klassenvariable festlegen und dann auf eine Objektvariable (Instanzvariable) zugreifen . Wir haben diese Objektvariable nie gesetzt, aber sie funktioniert. Wie ist das möglich?
Nun, Python versucht zuerst, die Objektvariable abzurufen, aber wenn es sie nicht finden kann, erhalten Sie die Klassenvariable. Warnung: Die Klassenvariable wird von Instanzen gemeinsam genutzt und die Objektvariable nicht.
Verwenden Sie daher niemals Klassenvariablen, um Standardwerte für Objektvariablen festzulegen. Verwenden Sie __init__
dafür.
Schließlich werden Sie feststellen, dass Python-Klassen Instanzen und damit Objekte selbst sind, was neue Erkenntnisse zum Verständnis der oben genannten gibt. Komm zurück und lies das später noch einmal, sobald du das merkst.