无法从另一个类访问变量?

时间:2016-01-07 17:00:09

标签: python

这是我的代码

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'

1 个答案:

答案 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