Skip to main content
 首页 » 编程设计

python之如何通过类层次结构聚合字典 (Python)

2025年05月04日15zfyouxi

假设我有以下类层次结构:

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