更改导入的类变量

时间:2017-01-29 12:22:48

标签: python function python-3.x class variables

我遇到这个问题,我试图更改已导入两个单独文件的类变量。

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.但是把它拿出来只会给我一个错误。

2 个答案:

答案 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.pyslave.py都导入slave模块的同一个实例,因此两者都是引用相同的Settings实例。

如果你真的需要影响一个进程的行为,那么你必须使用inter-process communication的一些特定机制,这个主题对于这个答案的范围而言过于宽泛。