在没有直接父级的情况下使用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)
谢谢。     
已邀请:
它可以工作,但是可能会使任何试图读取您的代码的人(包括您在内,除非您特别记得,否则都会使它困惑)。不要忘记,如果要从特定的父类调用方法,则可以执行以下操作:
A.method(self, arg)
    
好吧,“合法”一词在这里是个可疑的词。该代码最终将调用
A.method
,因为搜索中排除了赋予
super
的类型。至少可以这么说,我会认为这种ѭ3fla的用法,因为它将跳过继承层次结构的一个成员(看似危险),这与我作为开发人员的期望不一致。由于已经鼓励ѭ3的用户保持一致性,因此我建议您反对这种做法。     

要回复问题请先登录注册