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

如何从python中继承的父类访问变量?,python,oop,inheritance,multiple-inheritance,Python,Oop,Inheritance,Multiple Inheritance,我有以下代码,我想实现以下目标: 请理解我是OOP的新手 1) 从主函数初始化“B类” 2) 从“B类”继承“A类”,并根据“A类”变量的某些条件从“B类”中调用“D类” 3) 调用“class D”后,使用“class A”中的变量修改它们并打印出来 4) 之后,返回“B类”以运行更多条件的代码 ``` ``` 我想从“classd”内部打印出“self.A_var”的值。您还不明白继承是什么。D的实例是A和B的实例,因为它继承自A和B。您需要做的唯一一件事是确保在每个\uuuu init\u

我有以下代码,我想实现以下目标: 请理解我是OOP的新手 1) 从主函数初始化“B类”

2) 从“B类”继承“A类”,并根据“A类”变量的某些条件从“B类”中调用“D类”

3) 调用“class D”后,使用“class A”中的变量修改它们并打印出来

4) 之后,返回“B类”以运行更多条件的代码

```

```


我想从“classd”内部打印出“self.A_var”的值。

您还不明白继承是什么。D的实例是A和B的实例,因为它继承自A和B。您需要做的唯一一件事是确保在每个
\uuuu init\uuu
方法中调用
super()
;出于某种原因,您将D中的一个替换为完全错误的
D.\uuu init\uuu
,这将无休止地重复出现。放回
super(D,self)。\uuuu init\uuuu()


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

您还不明白继承是什么。D的实例是A和B的实例,因为它继承自A和B。您需要做的唯一一件事是确保在每个
\uuuu init\uuu
方法中调用
super()
;出于某种原因,您将D中的一个替换为完全错误的
D.\uuu init\uuu
,这将无休止地重复出现。放回
super(D,self)。\uuuu init\uuuu()


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

如果您想从“classd”内部打印出“self.A\u 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 

如果要从“class 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 

你的问题是什么?@barny我想让它打印出“self.A_var”,但它没有给我所需的输出,而是把“Running A..\u init___”作为输出。你的问题是什么?@barny我想让它打印出“self.A_var”,但它没有给我所需的输出,而是给出了“Running A.\u init__”作为输出。我仍然没有得到输出“self.A_var”所需的输出,我该怎么做,而只是运行一个。请回复。感谢您的理解,我是python中OOP的新手。我仍然没有得到输出“self.a_var”所需的输出,我该怎么做,而只是运行一个。请回复。感谢您的理解,我是python中OOP的新手。您还可以告诉我如何根据条件从“B类”中调用“D类”,即从“fun2”中调用“D类”。同样感谢您的回答。@RishabhGupta请让我明确您的条件在调用B类fun2函数中的D类后,您到底想做什么。如果在类B中调用类D,则会得到-RuntimeError:调用Python对象时超过了最大递归深度根据我的说法,这应该是程序的流程:1)主程序应该调用“类B”,它必须继承“类a”及其所有属性/变量。2) 根据“类别a”变量的状态,“类别B”应调用“类别D”,其中必须包含“类别a”和“类别B”的所有变量3)之后,代码必须返回到“类别B”,以便我可以检查附加条件,从“类别B”内部调用类似类别到“类别D”谢谢你的帮助。你能告诉我如何根据情况从“B类”中,即从“fun2”中调用“D类”吗。同样感谢您的回答。@RishabhGupta请让我明确您的条件在调用B类fun2函数中的D类后,您到底想做什么。如果在类B中调用类D,则会得到-RuntimeError:调用Python对象时超过了最大递归深度根据我的说法,这应该是程序的流程:1)主程序应该调用“类B”,它必须继承“类a”及其所有属性/变量。2) 根据“类别a”变量的状态,“类别B”应调用“类别D”,其中必须包含“类别a”和“类别B”的所有变量3)之后,代码必须返回到“类别B”,以便我可以检查附加条件,以便从“类别B”内部调用类似类别到“类别D”,感谢您的帮助。