使用ParentClass.method(self,*args,**kwargs)或super(MyClass,self).method(*args,**kwargs)

Str*_*ter 4 python syntax

当一个类有一个继承自单个类的类时,调用父方法的首选方法是什么?我知道有两种方法可以调用父方法.

选项1:

ParentClass.method(self, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

选项2:

super(MyClass, self).method(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

在处理多重继承时,选项1似乎确实很有意义; 我们想要专门调用某个类的方法.但是在处理单继承时,无论哪种方式都有效,但选项1可能更加安全.但有什么(比如PEP)说什么时候使用哪种风格?

Thi*_*ter 6

首先,如果你有旧式的课程,你需要使用选项1.

如果没有,则取决于代码:

  • 如果超类(或子类)使用super(或没有),您可以安全地使用super.这也意味着你的subclsses 必须使用super而不是Parent.method(self, ...).
  • 如果超类(或子类)使用旧的Parent.method(self, ...),也使用它.

http://fuhm.net/super-harmful/上有一个很好的,更冗长的解释.简短摘要(甚至比我上面的解释还要短):

  • 如果超类必须使用super,则子类必须使用super
  • 超类必须使用super,如果他们的子类做(有时)