Python:对象构造函数调用自身

时间:2013-04-19 14:30:16

标签: python multiple-inheritance mixins

我遇到了以下代码。对象构造函数调用自身:

  class StatusMixin(object):
    def __init__(self):
        super(StatusMixin, self).__init__()

        self.does_something()

有没有任何实际的理由为什么这样实施?我认为人们只在多重继承的上下文中使用super方法。

1 个答案:

答案 0 :(得分:6)

你提到了多重继承。这个类被描述为一个mixin:也就是说,它特别是意图在多重继承的情况下使用。它将是类层次结构中的元素之一,但不是顶部或底部。这就是它调用super的原因 - 方法解析顺序中的下一个项目实际上不是object,而是其他一些类。

考虑这个层次结构:

class Super(object):
    pass

class Sub(StatusMixin, Super)
    pass

并检查Sub.mro()

[__main__.Sub, __main__.StatusMixin, __main__.Super, object]

所以你看到StatusMixin中超级电话的结果根本不是object,而是Super