Использование общего словаря в классе
Не могу понять причину не накопления данных в словаре
class CLASS_A:
def __init__(self):
self.classDict = {
'a': 'aaaa',
'b': '',
}
class CLASS_B(CLASS_A):
def __init__(self):
super().__init__()
def funkB(self):
print(self.classDict)
self.classDict['b'] = 'bbbb'
print(self.classDict)
class CLASS_C(CLASS_B):
def __init__(self):
super().__init__()
def funkC(self):
print(self.classDict)
self.classDict.update({'c': 'cccc'})
print(self.classDict)
tB = CLASS_B()
tB.funkB()
tC = CLASS_C()
tC.funkC()
Ожидается, что словарь classDict будет наполняться и в результате получу:
...
{'a': 'aaaa', 'b': 'bbbb', 'c': 'cccc'}
Но в реальности получаю такой вывод:
{'a': 'aaaa', 'b': ''}
{'a': 'aaaa', 'b': 'bbbb'}
{'a': 'aaaa', 'b': ''}
{'a': 'aaaa', 'b': '', 'c': 'cccc'}
Как правильно накапливать данные в словаре?
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
- Классовые переменные объявляются вне блока
__init__и безself:
class CLASS_A:
classDict = {
'a': 'aaaa',
'b': '',
}
- Код уже будет рабочий, но все изменения отражаются и в
CLASS_B.classDictи вCLASS_A.classDict, поскольку это один и тот же объект. Если нужна независимость, то нужно пересоздать словарь в классеCLASS_B. И абстолютно также сделать в классеCLASS_C:
class CLASS_B(CLASS_A):
classDict = dict(CLASS_A.classDict)
#...
class CLASS_C(CLASS_B):
classDict = dict(CLASS_B.classDict)
#...