在Python中使用super()是个好主意吗?

Jos*_*son 12 python oop super

或者我应该只显式引用我想调用其方法的超类?

在引用它们的构造函数时重复超类的名称似乎很脆弱,但是这个页面http://fuhm.net/super-harmful/对使用super()做了一些很好的论据.

sun*_*ang 10

专家Python编程一书在第3章讨论了"超级陷阱"的主题.值得一读.以下是本书的结论:

超级用法必须保持一致:在类层次结构中,super应该在任何地方或任何地方使用.混合超级和经典电话是一种令人困惑的做法.人们倾向于避免超级,因为他们的代码更加明确.

编辑:今天我再次阅读本书的这一部分.我会复制一些句子,因为超级使用很棘手:

  • 避免在代码中进行多重继承.
  • 与其使用保持一致,不要混合使用新风格和旧风格.
  • 在子类中调用其方法之前检查类层次结构.


e-s*_*tis 6

你可以使用超级,但正如文章所说,有缺点.只要您了解它们,使用该功能就没有问题.就像人们说"使用组合,而不是继承"或"从不使用全局变量".如果该功能存在,则有一个原因.请务必明白为什么以及明智地使用它们.

  • *"如果该特征存在,则有一个原因."*这个论点简直是不真实的.许多语言都具有任何人都不应该使用的功能. (15认同)

ily*_* n. 5

super() 试图为您解决多重继承的问题;很难复制它的语义,除非你完全确定,否则你当然不应该创建任何新的语义。

对于单一继承来说,两者之间确实没有区别

class X(Y):
    def func(self):
        Y.func(self)
Run Code Online (Sandbox Code Playgroud)

class X(Y):
    def func(self):
        super().func()
Run Code Online (Sandbox Code Playgroud)

所以我想这只是品味问题。