【问题标题】:How to aggregate all attributes of a hierarchy of classes?如何聚合类层次结构的所有属性?
【发布时间】:2009-09-04 20:13:34
【问题描述】:

有一个层次结构的类。每个类可以定义一个类变量(具体来说,它是一个字典),所有这些变量都具有相同的变量名。给定子类的实例,我希望根类能够以某种方式访问​​所有这些变量(即所有字典连接在一起)。我似乎找不到这样做的方法。无论我尝试什么,我总是陷入这样一个事实,即我无法检索给定子类的直接父类。这如何实现?

【问题讨论】:

    标签: python class hierarchy


    【解决方案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}
    

    【讨论】:

    • 完美!正是我想要的。谢谢。
    猜你喜欢
    • 2013-03-15
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多