跨模块的Python枚举

跨模块的Python枚举,第1张

模块的Python枚举

就Python而言,这里有 三个 模块:

  • __main__
  • moduleA
  • moduleB

从命令行(主要入口点)运行的文件始终存储为

__main__
模块。如果您
moduleA
在代码中的任何位置导入,Python都会将其视为与
__main__
模块分开的,而是创建一个新的模块对象。因此,您有
两个 单独的
MyEnum
类:

  • __main__.MyEnum
  • moduleA.MyEnum

他们的成员是不同的,因此不能相等。

如果

import moduleA
您未使用
import __main__ as moduleA
或使用 单独的
脚本文件来驱动测试,则测试通过。该单独的文件将变为
__main__

#!/usr/bin/python3# test.py, separate from moduleA.py and moduleB.pyimport moduleA    import moduleBif __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。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5668551.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存