代码之家  ›  专栏  ›  技术社区  ›  musthero

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

  •  3
  • musthero  · 技术社区  · 13 年前

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

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

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

    1 回复  |  直到 13 年前
        1
  •  6
  •   Daniel Roseman    13 年前

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

    考虑以下层次结构:

    class Super(object):
        pass
    
    class Sub(StatusMixin, Super)
        pass
    

    并检查 Sub.mro() :

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

    所以你可以看到,这是超级调用的结果 StatusMixin 不是 对象 当然,但是 Super .