我遇到了以下代码。对象构造函数调用自身:
class StatusMixin(object):
def __init__(self):
super(StatusMixin, self).__init__()
self.does_something()
这样做有什么实际原因吗?我认为人们super
只在多重继承的上下文中使用该方法。
我遇到了以下代码。对象构造函数调用自身:
class StatusMixin(object):
def __init__(self):
super(StatusMixin, self).__init__()
self.does_something()
这样做有什么实际原因吗?我认为人们super
只在多重继承的上下文中使用该方法。
你提到多重继承。这个类被描述为一个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
.