如果我按如下方式定义父类和子类:
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'
我很困惑。我错过了什么?
答案 0 :(得分:1)
您应该将当前类传递给super,而不是超类:
class B(A):
def b_method(self):
super(B, self).a_method()
# ^
答案 1 :(得分:1)
答案 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()