当一个类有一个继承自单个类的类时,调用父方法的首选方法是什么?我知道有两种方法可以调用父方法。
选项1:
ParentClass.method(self, *args, **kwargs)
选项2:
super(MyClass, self).method(*args, **kwargs)
在处理多重继承时,选项1似乎确实很有意义;我们想要专门调用某个类的方法。但是在处理单继承时,无论哪种方式都有效,但选项1可能更加安全。但是有什么(比如PEP)说什么时候使用哪种风格?
答案 0 :(得分:6)
首先,如果您有旧式课程,则需要使用选项1 。
如果没有,则取决于代码:
super
(或没有),则可以安全地使用super。这也意味着您的子语言必须使用super
而不是Parent.method(self, ...)
。Parent.method(self, ...)
,也可以使用它。http://fuhm.net/super-harmful/有一个很好的,更详细的解释。 简短摘要(甚至比我上面的解释还要短):
- 如果他们的超类
,子类必须使用super- 超类必须使用super,如果他们的子类(有时)