我有MyEnum一个从 派生的枚举enum,在文件中定义,myenum.py例如:
# myenum.py
import enum
class MyEnum(enum.Enum):
ONE = 1
TWO = 2
importlib.import_module()然后,我使用该方法导入此文件。我创建a了我的枚举实例,并测试了它的值:它是正确的,如预期的那样。
但是,如果我重新加载我的文件,使用importlib.reload(),a不再等于MyEnum.ONE. 这是什么原因造成的?我在 Python 3.7 上。
# test.py
import importlib
def test_enum(e):
print(e, myenum.MyEnum.ONE)
print("test is :", e==myenum.MyEnum.ONE)
if __name__=='__main__':
globals()["myenum"] = importlib.import_module("myenum")
a = myenum.MyEnum.ONE
test_enum(a)
importlib.reload(globals()["myenum"])
test_enum(a)
结果
MyEnum.ONE MyEnum.ONE
test is : True
MyEnum.ONE MyEnum.ONE
test is : False
编辑:经过进一步研究,Python 中的枚举似乎是通过 ID 进行比较的。但是,当重新导入模块时,我的枚举的 ID 发生了变化,这就是比较返回的原因False。
有哪些选项可以避免此 ID 更改或允许比较保持 True ?