如何从python中继承的父类访问变量?
我有以下代码,我想实现以下目标: 请理解我是OOP的新手 1) 从主函数初始化“B类” 2) 从“B类”继承“A类”,并根据“A类”变量的某些条件从“B类”中调用“D类” 3) 调用“class D”后,使用“class A”中的变量修改它们并打印出来 4) 之后,返回“B类”以运行更多条件的代码 ``` ```如何从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
我想从“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”,感谢您的帮助。