如何在文件之间共享静态类变量?

时间:2019-05-16 05:21:51

标签: python

我试图在两个模块之间通过静态类共享数据。本来应该很简单,但是事实证明我遇到了一些陷阱。这是代码。

testa.py

class Tc:
    a = 0


if __name__ == "__main__":
    import testb
    print(Tc.a)

testb.py

import testa

print(testa.Tc.a)
testa.Tc.a = 1

print(testa.Tc.a)

运行命令

  

python testa.py

预期的投放量是

0
1
1

但是我得到

0
1
0

怎么回事?

2 个答案:

答案 0 :(得分:4)

  • testa被执行,它定义了Tc类并导入了testb
  • testb导入testa
  • 因为testa从未被导入 ,它会被执行并创建新的Tc
  • testb继续打印0,并为导入的testa.Tc递增testa
  • 运行中的testa继续打印其Tc.a计数器的值为零。

运行文件时,其模块名称为__main__(甚至可以在testa中有条件地检查它!),而在导入过程中,名称始终是模块的名称。因此重复。如果要避免这种情况,您应该真正使用3个单独的文件,一个文件运行并导入testa,而testb则导入testa

答案 1 :(得分:2)

当代码达到import testb时,它的内存中就有class Tc,但是模块尚未创建完毕。 testb然后再次导入testa,由于尚未创建,因此尚未被缓存,因此再次导入Tc并创建另一个*ngFor="let item of _items | filtername:{ parametername: searchtext, parametername: searchtext } : false"

TL; DR:请勿进行循环导入。