gpt4 book ai didi

Python 从所有派生类访问基类数据

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:39 24 4
gpt4 key购买 nike

我有一个 Python 3 程序,其中包含类的层次结构,这些类最终都派生自单个基类“RootClass”。我希望能够从任何类的对象中设置一个值,并从这些类的任何其他对象中查看该值。我当前有效的解决方案使用一个全局变量,该变量由“RootClass”中定义的对象方法访问。

文件 1.py:

_myVal= None  # the global variable

class RootClass:
def setVal(self, y):
global _myVal
_myVal= y
def getVal(self):
return _myVal

文件2.py:

from file1 import RootClass

class A (RootClass):
pass
class B (A):
pass
class C (B):
pass
class D (RootClass):
pass

if __name__ == "__main__":
objA = A()
objB = B()
objC = C()
objD = D()
objD.setVal(100)
print(objA.getVal())
print(objB.getVal())
print(objC.getVal())
print(objD.getVal())

执行:

CMD> python file2.py
100
100
100
100

我知道全局变量通常不受欢迎,但我认为没有其他东西看起来如此干净和简单。

我考虑的另一个选择是制作一个具有设置/获取方法的“ValClass”对象。然后 RootClass 中的 set/get 方法将调用该对象的 set/get 方法。但这意味着我仍然必须创建 ValClass 对象,并确保它可以从所有其他对象访问,所以我基本上回到了全局。

解决这个问题的更好/更 Pythonic 的方法是什么?

最佳答案

只需要将作用域设置为_myVal 的类作用域

class RootClass:
def setVal(self, y):
RootClass._myVal= y #Changed _myVal to be in RootClass's scope
def getVal(self):
return RootClass._myVal


class A (RootClass):
pass
class B (A):
pass
class C (B):
pass
class D (RootClass):
pass

if __name__ == "__main__":
objA = A()
objB = B()
objC = C()
objD = D()
objD.setVal(100)
print(objA.getVal())
print(objB.getVal())
print(objC.getVal())
print(objD.getVal())

关于Python 从所有派生类访问基类数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42474421/

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