如何在python中从继承的父类访问变量?

时间:2016-05-26 07:51:11

标签: python oop inheritance multiple-inheritance

我有以下代码,我想要实现以下目标: 请理解我是OOP的新手 1)初始化" B"来自主要功能

2)继承" A级"来自" B班"并且取决于" A类和#34;的变量的某些条件;打电话" D"来自" B"

3)拨打" D类"使用来自" A类和#34;的变量修改它们并打印出来。

4)之后回到" B"为更多条件运行代码。

```

    class A(object):
        def __init__(self):
            super(A,self).__init__()
            self.A_var = 0
            print('Running A.__init__')
    class B(A):
        def __init__(self):
            super(B,self).__init__()
            #B.__init__(self)

        def fun2():
            self.A_var += 5
            #foo = D()
            self.fun1
            print('Running B.__init__')
            print self.A_var        

            #A.__init__(self) 


    class D(B,A):
        def __init__(self):
            #super(A,grandfather).__init__()
            #A.__init__(grandfather)
            super(D,self).__init__()
            #D.__init__(self)
        def fun1():
            print('Running D.__init__')
            self.A_var += 400
            print self.A_var


    if __name__ == '__main__':
        b = B()
        b.fun2

```

我想打印出" self.A_var"的价值。来自内部" D"

2 个答案:

答案 0 :(得分:0)

您还没有理解继承是什么。 D 的实例是 A和B的实例,因为它继承自它们。您唯一需要做的就是确保在每个super()方法中调用__init__;出于某种原因,你已经用完全错误的D.__init__取代了D中的那个,这将无休止地递归。放回super(D,self).__init__()

唯一的另一个变化是删除B.fun2中D的无意义实例化;只需在那里拨打self.fun1()

答案 1 :(得分:0)

如果你想从“D类”里面打印出“self.A_var”的值 执行:d.fun1() 结帐此修改后的代码:

class A(object):
    def __init__(self):
        super(A, self).__init__()
        self.A_var = 0
        print('Running A.__init__')


class B(A):
    def __init__(self):
        super(B, self).__init__()

    def fun2(self):
        self.A_var += 5
        print ('Running B.__init__'), self.A_var


class D(B):
    def __init__(self):
        super(D, self).__init__()

    def fun1(self):
        self.A_var += 400
        print ('Running D.__init__'), self.A_var


if __name__ == '__main__':
    d = D()
    d.fun2()
    d.fun1()

使用此代码输出

Running A.__init__
Running B.__init__ 5
Running D.__init__ 405