我试图在两个模块之间通过静态类共享数据。本来应该很简单,但是事实证明我遇到了一些陷阱。这是代码。
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
预期的投放量是 p>
0
1
1
但是我得到
0
1
0
怎么回事?
答案 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:请勿进行循环导入。