Bei der Erläuterung des Konzepts von Klassenvariablen und Instanzvariablen in Python Für Variablen, die als Klassenvariablen, aber nicht als Instanzvariablen definiert sind, Ist es nicht seltsam, dass Sie mit der Notation der Instanzvariablen "self. Class variable name" zugreifen können? Mir ist aufgefallen. → Ich habe einen einfachen Code geschrieben und das Verhalten von "self. Class variable" bestätigt.
Wenn Sie in Python auf "self.variable name" verweisen,
Um eine Überlastung zu vermeiden, ist es sicherer, "class name.class variable name" zu schreiben, wenn auf eine Klassenvariable in einer Instanz verwiesen wird.
self.py
class Hoge:
id = 0
@classmethod
def dump_class(cls):
print("Klassenvariable: ", cls.id)
def construct(self, id):
self.id = id
def dump_instance(self):
print("Instanzvariable: ", self.id)
if __name__ == "__main__":
Hoge.dump_class() # -> 0
hoge_instance = Hoge()
hoge_instance.dump_instance() # -> 0,Wenn keine Instanzvariable definiert ist, wird auf die gleichnamige Klassenvariable verwiesen.
hoge_instance.dump_class() # -> 0
hoge_instance.construct(id=10) #Instanzvariablen definieren
hoge_instance.dump_instance() # -> 10,Die Referenz der Instanzvariablen hat Vorrang
hoge_instance.dump_class() # -> 0
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. Python-Klassenvariablen und Instanzvariablen | UX MILK
Recommended Posts