无法访问超类中的方法

时间:2017-06-21 19:33:58

标签: python python-2.7

如果我按如下方式定义父类和子类:

class A(object):
    def a_method(self):
        print "A!"

class B(A):
    def b_method(self):
        super(A, self).a_method()
        print "B!"

b_obj = B()

我希望以下内容打印出“A!”和“B!”,但它会引发错误:

b_obj = B()

AttributeError: 'super' object has no attribute 'a_method'

我很困惑。我错过了什么?

4 个答案:

答案 0 :(得分:1)

您应该将当前类传递给super,而不是超类:

class B(A):
    def b_method(self):
        super(B, self).a_method()
    #         ^

答案 1 :(得分:1)

因为你想要:

super(B, self).a_method()

否则,您将跳过mro中的A。

其他一切看起来都不错。

答案 2 :(得分:1)

您应该super(B, self)而不是super(A, self)。你需要访问B的超类,而不是A&#39。

答案 3 :(得分:1)

您需要将当前类传递给super。来自the official super documentation

  

super(type [,object-or-type])

     

返回一个代理对象,该方法将方法调用委托给类型的父类或兄弟类。

这是正确的代码:

super(B, self).a_method()