这是否合法使用super()?
class A(object):
def method(self, arg):
pass
class B(A):
def method(self, arg):
super(B,self).method(arg)
class C(B):
def method(self, arg):
super(B,self).method(arg)
谢谢。
答案 0 :(得分:8)
它会起作用,但它可能会让任何试图阅读你的代码的人感到困惑(包括你,除非你特别记得它)。不要忘记,如果你想从特定的父类调用一个方法,你可以这样做:
A.method(self, arg)
答案 1 :(得分:3)
嗯,“合法”在这里是一个值得怀疑的术语。代码最终会调用A.method
,因为super
的类型会从搜索中排除。我会考虑super
flaky的这种用法至少可以说,因为它会跳过继承层次结构的成员(看似很讽刺),这与我期望的开发人员不一致。由于已经鼓励super
的用户保持一致性,我建议不要这样做。