Рассмотрим фрагмент кода для базового класса Base
и двух его дочерних классов ChildA
и ChildB
:
class Base():
map = {}
def __init__(self, x):
type(self).map[x] = self
@classmethod
def get_state(cls, x):
if x in cls.map:
return cls.map[x]
return None
class ChildA(Base):
pass
class ChildB(Base):
pass
При создании экземпляра a = ChildA('foo')
и вызове ChildB.get_state('foo')
после этого , он возвращает экземпляр ChildA
.
Однако ожидаемое (или, скорее, желаемое поведение) было None
. Атрибут map
, кажется, присоединен к родительскому классу Base
, а дочерние классы share it.
Конечно, я мог бы просто добавить атрибут Speci c к дочерние классы
class ChildA(Base):
map = {}
class ChildB(Base):
map = {}
, но это многословно, если у вас много дочерних классов и несколько таких атрибутов. Есть ли способ решить эту проблему с помощью наследования от Base
?