2009-09-04 62 views
0

有一些类的。每个类可能会定义一个类变量(具体而言,它是一个字典),它们都具有相同的变量名称。给定一个子类的实例,我希望根类能够以某种方式访问​​所有这些变量(即所有连接在一起的字典)。我似乎无法找到办法。无论我尝试什么,我都会被卡住,因为我无法检索给定子类的直接父类。这如何实现?如何聚合类层次结构的所有属性?

回答

1

只要您使用的是新风格的类(即object或某些其他内置类型是“最深的祖先”),则可以使用__mro__。例如,给定:

>>> class Root(object): 
... d = {'za': 23} 
... 
>>> class Trunk(Root): 
... d = {'ki': 45} 
... 
>>> class Branch(Root): 
... d = {'fu': 67} 
... 
>>> class Leaf(Trunk, Branch): 
... d = {'po': 89} 
现在

>>> def getem(x): 
... d = {} 
... for x in x.__class__.__mro__: 
...  d.update(x.__dict__.get('d',())) 
... return d 
... 
>>> x = Leaf() 
>>> getem(x) 
{'za': 23, 'ki': 45, 'po': 89, 'fu': 67} 
+0

完美!正是我在找什么。谢谢。 – 2009-09-04 20:46:24