Die Antwort, in wenigen Worten
In Ihrem Beispiel: itsProblem
ist eine lokale Variable.
Sie müssen self
verwenden, um Instanzvariablen zu setzen und abzurufen. Sie können es in der __init__
Methode einstellen. Dann würde der Code sein:
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Aber wenn Sie eine echte Klassenvariable wollen, dann verwenden Sie den Klassennamen direkt:
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
print (Example.itsProblem)
Aber seien Sie vorsichtig mit dieser, wie theExample.itsProblem
automatisch eingestellt werden gleich Example.itsProblem
, ist aber nicht die gleiche Variable und kann unabhängig geändert werden.
Einige Erklärungen
In Python Variablen Auto dynamisch erstellt werden.
class Example(object):
pass
Example.itsProblem = "problem"
e = Example()
e.itsSecondProblem = "problem"
print Example.itsProblem == e.itsSecondProblem
Drucke
Wahre
Deshalb, das ist genau das, was Sie mit den vorherigen Beispielen tun: Dazu können Sie folgendes tun. In Python verwenden wir self
als this
, aber es ist ein bisschen mehr als das. Self
ist das erste Argument für jede Objektmethode, da das erste Argument immer die Objektreferenz ist. Dies ist automatisch, ob Sie es selbst nennen oder nicht.
Was bedeutet, dass Sie 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 der Objektmethode ANY ist das aktuelle Objekt, wir nennen es nur self
als Konvention. Und Sie fügen diesem Objekt nur eine Variable hinzu, genauso 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 wir zuerst bemerken gesetzt eine Klassenvariable, dann greifen wir ein Objekt (Instanz) Variable. Wir setzen diese Objektvariable niemals, aber es funktioniert, wie ist das möglich?
Nun, Python versucht, zuerst die Objektvariable zu bekommen, aber wenn sie es nicht finden kann, wird Ihnen die Klassenvariable geben. Warnung: Die Klassenvariable wird von Instanzen gemeinsam verwendet, die Objektvariable nicht.
Als Schlussfolgerung verwenden Sie nie Klassenvariablen, um Standardwerte für Objektvariablen festzulegen. Verwenden Sie dazu __init__
.
Schließlich werden Sie lernen, dass Python-Klassen Instanzen und somit Objekte selbst sind, die neue Erkenntnisse zum Verständnis der oben genannten gibt. Komm zurück und lies das später noch einmal, wenn du das merkst.
Titel bearbeitet Frage eigentlich über Klasse „statische“ Variablen: http://stackoverflow.com/questions/707380/in-python-how-can-i-access- static-class-variables-in-class-methods –