【问题标题】:Python: An object constructor calls itselfPython:对象构造函数调用自身
【发布时间】:2013-04-12 23:44:00
【问题描述】:

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

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

        self.does_something()

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

【问题讨论】:

  • StatusMixin.__init__ 不调用自己;它调用X.__init__,其中X 是其方法解析顺序中的下一个类。 (在这里评论是因为问题本身包含一个错误的假设;丹尼尔罗斯曼的回答涵盖了这一点。)

标签: python multiple-inheritance mixins


【解决方案1】:

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

考虑这个层次结构:

class Super(object):
    pass

class Sub(StatusMixin, Super)
    pass

并检查Sub.mro()

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

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

【讨论】:

  • +1 - 这是必要的主要原因,即当您不知道超类类型是什么时。但是,使用super 调用带有参数的超类构造函数时存在一些潜在问题 - 请参阅this
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
相关资源
最近更新 更多