3

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

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

        self.does_something()

这样做有什么实际原因吗?我认为人们super只在多重继承的上下文中使用该方法。

4

1 回答 1

6

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

考虑这个层次结构:

class Super(object):
    pass

class Sub(StatusMixin, Super)
    pass

并检查Sub.mro()

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

所以你看到这里 super 调用的结果StatusMixin根本不是object,而是Super.

于 2013-04-19T14:36:45.067 回答