【发布时间】:2019-11-18 22:09:01
【问题描述】:
我已经研究了很长时间,但找不到这个特定的问题(所以也许我遗漏了一些简单的东西!)但我在将类分成不同的 .py 文件时遇到了麻烦。
场景:
Main 类导入一个 Settings 类文件和一个 Work 类文件。Settings 类使用从 Object 类文件实例化的对象填充一个列表...
Work 类想要循环遍历该列表并更改每个对象中的值。
我已经通过将值设为类变量而不是实例来进行尝试。我仍然必须在工作类中导入设置类,以便编写代码来访问要更改的值。但它不会更改调用所有这些类的主类中该类的实例!
我读了一篇关于属性的文章。他们给出的示例仍然是同一文件中不同类的示例。
任何关于我应该看什么的建议将不胜感激!
这是我正在做的测试:
所有运行的主文件:
import Set_Test
import Test_Code
sting = Set_Test.Settings()
tc = Test_Code.Testy()
ID = sting._settingsID
print(f'Settings ID is: {ID}')
tc.changeVal()
ID = sting._settingsID
print(f'Settings ID is: {ID}')
Set_Test.py:
class Settings:
def __init__(self):
self._settingsID = 1
@property
def settingsID(self):
return self._settingsID
@settingsID.setter
def settingsID(self, value):
self.settingsID = value
Test_Code.py:
import Set_Test
class Testy:
def changeVal(self):
Set_Test.Settings.settingsID = 8
【问题讨论】:
-
对,但究竟是什么问题?你看到了什么行为,你期望什么?
-
我希望Test_Code中的changeVal方法改变Set_Test中settingsID的值。所以在第二次打印时它应该打印新值。
-
@Ripfury 这应该是
self._settingsID = value,注意下划线 -
因为它只是打印 1 而不是 8
-
@Ripfury 而这个
Set_Test.Settings.settingsID = 8导致class variable没有像预期的那样改变实例变量的值。
标签: python python-3.x class variables scope