假设我有以下类层次结构:
class A(object):
_d = {}
class B(A):
_d = {'b': 1}
class C(A):
_d = {'b': 2, 'c': 3}
class D(B):
_d = {'d': 4}
有没有办法写一个@property方法d在 A哪个将返回一个对象的所有父类(super class)的聚合字典?例如,B().d会返回 {'b': 1} , C().d会返回 {'b': 2, 'c': 3} , 和 D().d会返回 {'b': 1, 'd': 4} .
请您参考如下方法:
使用 inspect.getmro 跳过任何多重继承问题,避免递归调用获取所有子类的必要性。
import inspect
@property
d(self):
res = {}
subclasses = inspect.getmro(type(self))
for cls in reversed(subclasses):
res.update(gettattr(cls, 'd', {}))
return res
