Python 的多重继承:选择调用哪个 super()

新手上路,请多包涵

在 Python 中,我如何选择调用哪个 Parent 的方法?假设我想调用父 ASDF2 的 __init__ 方法。好像我必须在 super().. 中指定 ASDF1 ?如果我想调用 ASDF3 的 __init__ ,那么我必须指定 ASDF2 ?!

 >>> class ASDF(ASDF1, ASDF2, ASDF3):
...     def __init__(self):
...         super(ASDF1, self).__init__()

>>> ASDF()
# ASDF2's __init__ happened

>>> class ASDF(ASDF1, ASDF2, ASDF3):
...     def __init__(self):
...         super(ASDF2, self).__init__()

>>> ASDF()
# ASDF3's __init__ happened

对我来说似乎很疯狂。我究竟做错了什么?

原文由 Name McChange 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 364
2 个回答

这不是 super() 的用途。 Super 基本上按照特定的顺序选择一个(或所有)它的父母。如果您只想调用单亲的方法,请执行此操作

class ASDF(ASDF1, ASDF2, ASDF3):
    def __init__(self):
        ASDF2.__init__(self)

原文由 Falmarri 发布,翻译遵循 CC BY-SA 3.0 许可协议

super 调用方法解析顺序中的下一个方法。在线性继承树中,这将是来自直接父类的方法。

在这里,你有三个父母,下一个 __init__ 方法来自 ASDF1 的观点是 ASDF2 的观点。一般来说,安全的做法是将继承列表中的第一个类传递给 super 除非你知道为什么要做其他事情。

所有这一切的目的是让您不必明确选择要调用的 __init__ 方法。这里的问题是为什么您不想调用所有超类 __init__ 方法。

有大量关于在 python 中使用 super 的文献,我建议您用谷歌搜索该主题,并阅读结果。

原文由 Marcin 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏