使用super()而不是直接父级

时间:2011-05-25 20:39:06

标签: python 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 个答案:

答案 0 :(得分:8)

它会起作用,但它可能会让任何试图阅读你的代码的人感到困惑(包括你,除非你特别记得它)。不要忘记,如果你想从特定的父类调用一个方法,你可以这样做:

A.method(self, arg)

答案 1 :(得分:3)

嗯,“合法”在这里是一个值得怀疑的术语。代码最终会调用A.method,因为super的类型会从搜索中排除。我会考虑super flaky的这种用法至少可以说,因为它会跳过继承层次结构的成员(看似很讽刺),这与我期望的开发人员不一致。由于已经鼓励super的用户保持一致性,我建议不要这样做。