Wenn mehrere Klassen von der übergeordneten Klasse mit Klassenvariablen erben Beachten Sie, dass das Verhalten beim Zugriff der untergeordneten Klasse auf die Klassenvariable verdächtig war.
Fazit (?):
--Mutable Klassenvariablen werden wahrscheinlich auch in der geerbten untergeordneten Klasse gemeinsam genutzt. --Schreiben Sie dieselbe Variable in der untergeordneten Klasse, wenn Sie sie separat verwalten möchten
#Elternklasse
class AbstClass:
class_number = 0
dict_number = {'class': 0}
#Kinderklasse 1
class Class1(AbstClass):
def __init__(self):
self.class_number = 1
self.dict_number['class'] = 1
#Kinderklasse 2
class Class2(AbstClass):
def __init__(self):
self.class_number = 2
self.dict_number['class'] = 2
obj1 = Class1()
print(obj1.class_number, obj1.dict_number['class']) # 1,1 ← Verstehe
obj2 = Class2()
print(obj2.class_number, obj2.dict_number['class']) # 2,2 ← Verstehen
print(obj1.class_number, obj1.dict_number['class']) # 1, 2 ←!?
Es ist leicht zu verstehen, ob "zwei untergeordnete Klassen auf die Klassenvariablen derselben übergeordneten Klasse zugreifen". Im obigen Beispiel
--class_number
wird von zwei Klassen getrennt verwaltet
--dict_number
wird von zwei Klassen gemeinsam genutzt → Überschreibt dict_numer, das in Class1 neu geschrieben wurde, wenn Class2 () ausgeführt wird
Es ist geworden.
Ist veränderlich / unveränderlich beteiligt? Ich vermute. Mit anderen Worten
--mutable Klassenvariable (dict_number
oben): wird von untergeordneten Klassen geteilt
class_number
oben): werden separat in untergeordneten Klassen verwaltetWenn Sie in AbstClass ein Taple von "class_number_tuple = (0,)" definieren, Das gleiche Verhalten wie "class_number" wurde bestätigt. (* Int ist unveränderlich. Referenz: [GAMMASOFT: In Python integrierte Klassentabelle für Datentypen (veränderbar usw.)] (https://gammasoft.jp/blog/python-built-in-types/))
Definieren Sie Klassenvariablen in untergeordneten Klassen neu:
class Class1(AbstClass):
class_number = 0
dict_kv = {'class': 0}
class Class2(AbstClass):
class_number = 0
dict_kv = {'class': 0}
In jedem Fall werden die Klassenvariablen jeder Klasse priorisiert = sie werden separat verwaltet.
Wenn Sie möchten, möchte ich jedoch, dass Sie automatisch eine Ausnahme als Sprache auslösen.
――In der Tat, wenn ich eine Liste in den Schlüssel des Wörterbuchs stecke, ärgere ich mich über Unhashable
Als aktuelle Maßnahme
Geht es um ... Ich würde mich freuen, wenn Sie mir gute Maßnahmen nennen könnten.
Recommended Posts