gpt4 book ai didi

python-3.x - python : update instance variable of parent class in child class

转载 作者:行者123 更新时间:2023-12-04 01:49:53 25 4
gpt4 key购买 nike

我对此进行了很多搜索,但似乎找不到针对我的问题的任何内容。

假设我有三个独立的 python 文件 fileA.py、fileB.py 和 fileMain.py

fileB.py 继承自 fileA.py。

文件A.py

class Parent():
def __init__(self):
self.valueA = 5

文件B.py

from fileA import Parent

class Child(Parent):
def __init__(self):
Parent.__init__():
self.valueB = 10

def Calculate(self):
self.result = self.valueB + self.valueA
print(self.result)

在 fileMain.py 中,我有一些代码在父类中的 valueA 更改后调用子类中的计算方法。

from fileA import Parent
from fileB import Child

class MainProgram():
def __init__(self):
self.parent = Parent()
self.child = Child()

self.parent.valueA = 8

self.child.Calculate()

foobar=MainProgram()

我的问题是,打印输出是 15 而不是 18。为什么?我怎样才能解决这个问题以获得预期的结果?

我希望 fileB.py 从 fileA.py 继承的原因是我计划让 fileC.py 也从 fileA.py 继承,并在那里完成其他计算也使用 self.valueA。 valueA 应该由程序的用户设置。我在这里简化了事情。希望这是有道理的?

抱歉,如果我使用的术语有误。请纠正我。 :)

最佳答案

您似乎不清楚实例(也称为对象)是如何工作的。

ParentChildMainProgram。您可以将它们视为蓝图。它们不会改变

当你实例化一个类时,你得到一个实例,例如:

parent = Parent()
child = Child()

parentchild 是实例。当您调用 parent.valueA = 8 时,您正在更改 instance 上名为 parent 的值。

当您调用 child.Calculate() 时,它与 parent 实例无关。当您实例化 Child() 时,Parent() 构造函数被调用,因此 child.valueA 被设置为等于 5。您需要调用 child.valueA = 8 才能更改它。

有关更多信息,请考虑通读以下内容:https://realpython.com/python3-object-oriented-programming/

(编辑:顺便说一下,您指的是文件 B 继承自文件 A 等等。这是对术语的错误使用。一个文件不会继承另一个文件。你会说一个模块 imports 来自另一个 module。一个类 inherits 来自另一个 class)

编辑2:

如果您的目标是在所有实例之间共享Parentstate,您可以为其使用Borg 模式。本质上,Borg 的每个实例都与所有其他实例共享其状态。所以如果你执行 parent1 = Parent()parent2 = Parent(),然后执行 parent1.valueA = 8,那么 parent2.valueA 也将等于 8

它是这样工作的:

class Parent(object): #This is a Borg class
__shared_state = {}

def __init__(self):
self.__dict__ = self.__shared_state
self.valueA = 5


class Child(Parent):
def __init__(self):
Parent.__init__(self)
self.valueB = 10

def Calculate(self):
self.result = self.valueB + self.valueA
print(self.result)


class MainProgram():
def __init__(self):
self.parent = Parent()
self.child = Child()

self.parent.valueA = 8

self.child.Calculate()

foobar=MainProgram()

关于python-3.x - python : update instance variable of parent class in child class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53634090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com