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

mus*_*ero 3 python multiple-inheritance mixins

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

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

        self.does_something()
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*man 6

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

考虑此层次结构:

class Super(object):
    pass

class Sub(StatusMixin, Super)
    pass
Run Code Online (Sandbox Code Playgroud)

并检查Sub.mro():

[__main__.Sub, __main__.StatusMixin, __main__.Super, object]
Run Code Online (Sandbox Code Playgroud)

所以你看到这里超级电话的结果StatusMixin根本不是object,但是Super.