Ich habe eine Klassenvariable mit einer Instanzvariablen in Python verwechselt, daher hat es nicht wie erwartet funktioniert. Notieren Sie sich dies als Referenz.
Es scheint ein häufiger Fehler zu sein, und es gibt Artikel, die sich mit demselben Thema befassen.
Die Punkte sind in diesem Kommentar zusammengefasst.
Python verhält sich beim Verweisen auf self.odds zunächst auf die Instanzvariable, andernfalls auf die Klassenvariable.
Ein anderer Artikel macht ebenfalls auf sich aufmerksam.
Wenn Sie auf Klassenvariablen zugreifen, sollten Sie vermeiden, auf sie wie "instance.class-Variablen" oder "self.class-Variablen" zuzugreifen, es sei denn, Sie haben einen bestimmten Grund dafür. In Python können Instanzvariablen aus Instanzobjekten erstellt werden, wodurch Klassenvariablen mit Instanzvariablen unbeabsichtigt ausgeblendet werden können.
Lassen Sie uns dies anhand eines einfachen Beispiels sehen.
Da ich über self
auf Klassenvariablen zugreifen kann, habe ich falsch verstanden, dass ich eine Instanzvariable definiert habe.
class Test:
a = []
def append(self, value):
self.a.append(value)
def clear(self):
self.a = []
t1 = Test()
t1.append(123)
print(t1.a)
t1.clear()
print(t1.a)
Ausführungsergebnis
[123]
[]
Als ich das betrachtete, dachte ich, dass der Wert gelöscht wurde. In der Realität werden die Klassenvariablen einfach durch die gleichnamigen Instanzvariablen verdeckt.
Wenn Sie eine andere Instanz erstellen, wird die Klassenvariable mit dem Zusatz 123
angezeigt.
t2 = Test()
print(t2.a)
Ausführungsergebnis
[123]
Was mich wirklich interessierte, war ein Programm, das viele Male "klar" genannt wurde. Obwohl ich bemerkte, dass das Verhalten seltsam war, achtete ich nicht unmittelbar nach der Erstellung der Instanz auf den Zustand, und die Untersuchung der Ursache verzögerte sich.
Initialisieren wir die Instanzvariable mit dem Konstruktor.
class Test:
def __init__(self):
self.a = []
Recommended Posts