Подклассы имеют атрибуты своих суперклассов как свои атрибуты. Вы не можете использовать directionay.update({"zero":0})
, потому что в это время class Subclass
все еще не существует. Если вы не делаете line1 & amp; line2, вы все равно можете увидеть строку4 {'one':1, 'two':2}
, подтверждающую ее.
Но если вы делаете line1 & amp; line2, вам нужно было добавить copy()
, в противном случае вы увидите строку 3 и amp; line4 оба становятся {'zero': 0, 'two': 2, 'one': 1}
, что означает, что вы хотите расширять параметры в подклассе, но вы также изменяете параметры в суперклассе, это не разумно.
Итак, следующий код будет просто выводиться:
< blockquote>{'two': 2, 'one': 1}
{'zero': 0, 'two': 2, 'one': 1}
blockquote>, который, я думаю, соответствует вашим требованиям.
class Super(object):
dictionary = {'one':1, 'two':2}
def __init__(self, var):
self.var = var
def supermethod(self):
pass
class Subclass(Super):
dictionary = Super.dictionary.copy() # line1
dictionary.update({"zero":0}) # line2
def __init__(self, var):
super(Subclass, self).__init__(var)
self.var = var
def submethod(self):
pass
print(Super.dictionary) # line3
print(Subclass.dictionary) # line4