S'il y a plusieurs classes qui héritent de la classe parente qui a des variables de classe Notez que le comportement lorsque la classe enfant accède à la variable de classe était suspect.
Conclusion (?):
#Classe parent
class AbstClass:
class_number = 0
dict_number = {'class': 0}
#Classe enfant 1
class Class1(AbstClass):
def __init__(self):
self.class_number = 1
self.dict_number['class'] = 1
#Classe enfant 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 ← Comprendre
obj2 = Class2()
print(obj2.class_number, obj2.dict_number['class']) # 2,2 ← Comprendre
print(obj1.class_number, obj1.dict_number['class']) # 1, 2 ←!?
Il est facile de comprendre si "deux classes enfants accèdent aux variables de classe de la même classe parent", Dans l'exemple ci-dessus
--class_number
est géré séparément par deux classes
--dict_number
est partagé par deux classes → Écrase dict_numer réécrit dans Class1 lorsque Class2 () est exécuté
Il est devenu.
Est-ce que mutable / immuable est impliqué? J'imagine. En d'autres termes
dict_number
ci-dessus): partagée par les classes enfantsnuméro_classe
ci-dessus): gérées séparément dans les classes enfantsEn fait, si vous définissez un taple de class_number_tuple = (0,)
dans AbstClass,
Le même comportement que class_number
a été confirmé.
(* Int est immuable. Référence:
[GAMMASOFT: table de classification des types de données intégrée à Python (mutable, etc.)]
(https://gammasoft.jp/blog/python-built-in-types/))
Redéfinissez les variables de classe dans les classes enfants:
class Class1(AbstClass):
class_number = 0
dict_kv = {'class': 0}
class Class2(AbstClass):
class_number = 0
dict_kv = {'class': 0}
Et, dans chaque cas, les variables de classe de chaque classe sont hiérarchisées = elles sont gérées séparément.
Cependant, si vous le souhaitez, je souhaite que vous leviez automatiquement une exception en tant que langue.
――En fait, quand je mets une liste dans la clé du dictionnaire, je me fâche avec unhashable
--S'il est possible de spécifier des "variables de classe à partager" et "des variables de classe à écraser par des classes enfants" comme @ abstractmethod
de ABC ...
En tant que mesure courante,
S'agit-il de ... Je vous serais reconnaissant si vous pouviez me dire de bonnes mesures.
Recommended Posts