Python версия 2.7.
Сценарий
class A(object):
x = 0
class B(A):
pass
ai = A()
bi = B()
#Then:
id(ai.x) == id(bi.x)
>>> True
Я хотел бы знать, есть ли способ, кроме наличия всех определений членов класса в __init__
, чтобы иметь экземпляры class B
, имеющие свои собственные копии x
, без необходимости переопределять их в class B
?
Возможно, некоторые type()
трюки?
Пока ничего не нашел, но я буду продолжать искать, подумал, что здесь будет лучшее место, чтобы найти ответ.
Любое понимание очень ценится.
редактировать: грамматики
edit2 Чтобы уточнить, я не использовал лучший пример.
class Y(object):
def __init__(self):
self.z = 0
class A(object):
x = Y()
class B(A):
pass
ai = A()
bi = B()
id(ai.x) == id(bi.x)
>>> True
ai.x.z = 3
id(ai.x) == id(bi.x)
>>> True
Теперь возникает проблема, так как я не переназначаю x
в class B
, они оба указывают на один и тот же экземпляр class Y
, даже если члены экземпляра class Y
меняются.
Если вы знакомы с Django, я почти воссоздаю, как работают их формы. Я не решил использовать metaclass
для форм, а затем создавать словарь полей при каждом создании нового экземпляра, возможно, мне придется переключиться на использование metaclass
.
редактировать третий Теперь я понимаю невозможность, которую я прошу у переводчика. Как только я назначу экземпляр класса члену, унаследованные классы не смогут узнать, как создать новый экземпляр этого класса. Поэтому для моей проблемы кажется, что метаклассы - единственное решение.