Я полагаю, что я неправильно понимаю, как наследование типов работает в python.Python унаследованные переменные типа
Хотя я определяю переменную внутри родительского класса, любой класс Child унаследован в родительском , ссылаясь на одну и ту же переменную от родителя.
class Parent(object):
store = dict()
class ChildA(Parent):
pass
class ChildB(Parent):
pass
ChildA.store['key1'] = 'val'
ChildB.store['key2'] = 'val'
print ChildB.store['key1'] == ChildA.store['key2']
То, что я пытаюсь достичь store
словаря будет создан экземпляр в каждом Child
класса, унаследованного от Parent
. Таким образом, ссылки ChildB.store['key1']
поднимет KeyError
Я пытался использовать __new__
для создания словаря экземпляра в то время как тип создание:
class NewParent(object):
def __new__(cls, *args, **kwargs):
rv = super(NewParent,cls).__new__(cls, *args, **kwargs)
rv.store = dict()
return rv
Но это, кажется, как __new__
работает только до инстанцирования Child
класса, так что ссылки на переменном с помощью типа (например Child.store
поднимается AttributeError
)
Так есть ли способ достичь поведения, которого я хочу?
Вы хотите метакласса, который является "класс класса". Например, см. Http://eli.thegreenplace.net/2011/08/14/python-metaclasses-by-example/ –
Возможный дубликат [Почему моя переменная экземпляра не указана в \ _ \ _ dict \ _ \ _?] (http://stackoverflow.com/questions/35805/why-is-my-instance-variable-not-in-dict) – oefe