就Python而言,这里有 模块:
从命令行(主要入口点)运行的文件始终存储为__main__
模块。如果您moduleA
在代码中的任何位置导入,Python都会将其视为与__main__
模块分开的,而是创建一个新的模块对象。因此,您有两个 单独的MyEnum
类:
他们的成员是不同的,因此不能相等。
如果import moduleA
您未使用import __main__ as moduleA
或使用 单独的 脚本文件来驱动测试,则测试通过。该单独的文件将变为__main__
:
#!/usr/bin/python3
# test.py, separate from moduleA.py and moduleB.py
import moduleA
import moduleB
if __name__ == "__main__":
myVar = moduleA.MyEnum.B
moduleB.doStuff(myVar)
另一个解决方法是告诉Python__main__
并且moduleA
是同一回事。 在 导入moduleA
(或moduleB
导入moduleA
) 之前 ,您可以将另一个条目添加到sys.modules
:
if __name__ == '__main__':
import sys
sys.modules['moduleA'] = sys.modules['__main__']
import moduleB
我认为这不是Pythonic。