这是我的代码
class A():
def __init__(self):
self.say_hello = "hello"
def doneA(self):
print "A done"
class B(A):
def __init__(self):
print self.say_hello
def doneB(self):
print "B done"
a = A()
b = B()
a.doneA()
b.doneB()
当我运行它时,我得到错误AttributeError:B实例没有属性' say_hello'
答案 0 :(得分:4)
您需要在B类的构造函数中添加对super
的调用,否则永远不会创建say_hello
。像这样:
class B(A):
def __init__(self):
super(B, self).__init__()
print self.say_hello
def doneB(self):
print "B done"
如果您在Python 2中执行此操作(显然您基于打印语句),则必须确保使用"new style" class而不是旧式类。您可以通过让A
类继承自object
来完成此操作,如下所示:
class A(object):
def __init__(self):
self.say_hello = "hello"
def doneA(self):
print "A done"
class B(A):
def __init__(self):
super(B, self).__init__()
print self.say_hello
def doneB(self):
print "B done"
a = A()
b = B()
a.doneA()
b.doneB()
运行此脚本会给出:
hello
A done
B done