【发布时间】:2020-03-29 18:38:34
【问题描述】:
考虑基类Base 及其两个子类ChildA 和ChildB 的代码sn-p:
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,子类共享它。
当然我可以简单地为子类添加一个特定的属性
class ChildA(Base):
map = {}
class ChildB(Base):
map = {}
但如果您有许多子类和其中的几个属性,这将是冗长的。有没有办法通过继承Base来解决这个问题?
【问题讨论】:
标签: python inheritance