【问题标题】:How to access variables from inherited class of parent in python?如何从python中继承的父类访问变量?
【发布时间】:2016-05-26 07:51:11
【问题描述】:

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

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

3) 调用“D 类”后,使用“A 类”中的变量对其进行修改并打印出来。

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

```

我想从“class D”中打印出“self.A_var”的值

【问题讨论】:

  • 你的问题是什么?
  • @barny 我希望它打印出 "self.A_var" ,但它没有给我所需的输出,而是给出 "Running A.__init__" 作为输出。

标签: python oop inheritance multiple-inheritance


【解决方案1】:

如果你想从“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 

【讨论】:

  • 您能否告诉我如何根据条件从“B 类”(即“fun2”中)调用“D 类”。也谢谢你的回答。
  • @RishabhGupta 请让我清楚你的情况,在 B 类 fun2 函数中调用 D 类后你到底想做什么。如果你在 B 类中调用 D 类,你会得到 - RuntimeError: maximum recursion depth exceeded while calling a Python object
  • 在我看来,这应该是程序的流程: 1)主程序应该调用“class B”,它必须继承“class A”及其所有属性/变量。 2)根据“A类”变量的状态,“B类”应该调用“D类”,它必须具有“A类”和“B类”的所有变量 3)之后代码必须返回“B 类”,以便我可以检查附加条件,以便从“B 类”内部将类似的类称为“D 类”谢谢您的帮助。
【解决方案2】:

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

唯一的其他变化是删除 B.fun2 中 D 的无意义实例化;只需在此处致电self.fun1()

【讨论】:

  • 我仍然没有得到输出 "self.A_var" 所需的输出,我该怎么做,而我只是将 Running A.__init__ 作为输出,请回复。感谢理解,我是python中OOP的新手。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多