我遇到这个问题,我试图更改已导入两个单独文件的类变量。
在settings.py
。
class Settings:
Flag = True
在slave.py.
from settings import Settings
if(...):
Settings.Flag = False
print('Flag is False')
else:
...
在main.py
from settings import Settings
While True:
print('Status of Flag : ' str(Settings.Flag))
即使我改变它,所以在Slave.py中Flag被更改为False。它仍然在main.py中返回True。
我认为这可能是因为我在Slave.py和&amp ;;中导入设置。 main.py.但是把它拿出来只会给我一个错误。
答案 0 :(得分:2)
您应该在main.py中导入slave.py以便运行他的代码,以及我没有看到对文件slave.py的任何引用
试试这个:
from settings import Settings
import slave
While True:
print('Status of Flag : ' str(Settings.Flag))
答案 1 :(得分:1)
这里的问题是你试图在一个进程中控制另一个进程中的变量。我发现main.py
没有引用slave
模块,因此推断出您正在单独运行slave.py
(例如您运行main.py
一个窗口,另一个窗口slave.py
。
考虑以下模块:
settings.py:
class Settings:
Flag = True
slave.py:
from settings import Settings
def change_value(v):
Settings.Flag = v
main.py:
from settings import Settings
from slave import change_value
print('Status of Flag :', str(Settings.Flag))
change_value(False)
print('Status of Flag :', str(Settings.Flag))
change_value(True)
print('Status of Flag :', str(Settings.Flag))
现在,当您运行main.py
时,您应该看到输出
('Status of Flag :', 'True')
('Status of Flag :', 'False')
('Status of Flag :', 'True')
这是有效的,因为现在所有模块都是同一个流程的一部分,因此main.py
和slave.py
都导入slave
模块的同一个实例,因此两者都是引用相同的Settings
实例。
如果你真的需要影响一个进程的行为,那么你必须使用inter-process communication的一些特定机制,这个主题对于这个答案的范围而言过于宽泛。