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

时间:2011-04-22 21:05:24

标签: syntax python

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

选项1:

ParentClass.method(self, *args, **kwargs)

选项2:

super(MyClass, self).method(*args, **kwargs)

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

1 个答案:

答案 0 :(得分:6)

首先,如果您有旧式课程,则需要使用选项1

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

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

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

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