我正在尝试创建一个系统,我可以尽可能轻松地改变A的值。当我将A导入各种其他模块并修改A的字段时 它们似乎在外国模块中保持不变,但在A的原生模块中没有变化。
# module name a.py
import b
class A:
x = 0
@classmethod
def call_mutate_A_from_B(cls):
b_object = b.B()
b_object.mutate_A() # change does not seem to stay in effect upon
# return
print(cls.x) # prints 0
def main():
A.call_mutate_A_from_B()
if __name__ == '__main__':
main()
# module name b.py
from a import A
class B: # in a different module
def mutate_A():
A.x = 2
这是预期的行为吗?我不这么认为。我应该创建A的对象表示,而不是将其视为静态类吗?
答案 0 :(得分:0)
回答你的第一个问题:是的,这是预期的行为。让我们说模块A由另一个模块B导入。当我们import A
时,会发生两件事:
导入的模块A的所有对象定义都导入到B。
A中的任何可执行语句都会执行(只执行一次)。
为了详细说明第一点,A中的类,函数,变量等的所有定义都被导入到B中。可以说B现在有自己的模块A内容的工作副本可供使用。更改这些副本的任何方面不会对原始定义产生任何影响,这意味着这些更改将不反映在A(导入的模块)中。
我希望这能解决你的问题。您可以在official Python docs中阅读有关模块如何工作的更多信息。