使用super()与非直接父类

14 投票
2 回答
2880 浏览
提问于 2025-04-16 18:20

这是对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)

撰写回答