使用super()与非直接父类
这是对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)
谢谢。
2 个回答
3
这里提到的“合法”这个词有点值得怀疑。代码最终会调用 A.method
,因为给 super
的类型在搜索时被排除了。我觉得这种使用 super
的方式很不靠谱,至少可以这么说,因为它会跳过继承层次中的某个成员(看起来是随意的),这和我作为开发者的预期不太一致。由于使用 super
的人已经被鼓励保持一致性,我建议不要这样做。
12
这样做是可以的,但可能会让任何试图阅读你代码的人感到困惑(包括你自己,除非你特别记得这样做)。别忘了,如果你想调用某个特定父类的方法,你可以直接这样做:
A.method(self, arg)