当一个类有一个继承自单个类的类时,调用父方法的首选方法是什么?我知道有两种方法可以调用父方法.
选项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)说什么时候使用哪种风格?
首先,如果你有旧式的课程,你需要使用选项1.
如果没有,则取决于代码:
super
(或没有),您可以安全地使用super.这也意味着你的subclsses 必须使用super
而不是Parent.method(self, ...)
.Parent.method(self, ...)
,也使用它.在http://fuhm.net/super-harmful/上有一个很好的,更冗长的解释.简短摘要(甚至比我上面的解释还要短):
- 如果超类必须使用super,则子类必须使用super
- 超类必须使用super,如果他们的子类做(有时)