【发布时间】:2014-10-27 14:29:46
【问题描述】:
如果枚举已在主模块中定义,为什么不能在 Python 3 中跨模块边界正确检查枚举相等性?这是一个例子:
模块A.py:
#!/usr/bin/python3
import moduleB
from enum import Enum, unique
@unique
class MyEnum(Enum):
A = 1
B = 2
# def __eq__(self,other):
# assert isinstance(other,self.__class__)
# return self.value == other.value
if __name__ == "__main__":
myVar = MyEnum.B
moduleB.doStuff(myVar)
模块B.py:
#!/usr/bin/python3
import moduleA
def doStuff(aVariable):
bVariable = moduleA.MyEnum.B
assert aVariable == bVariable
在命令行上调用“./moduleA.py”会产生:
Traceback (most recent call last):
File "./moduleA.py", line 17, in <module>
moduleB.doStuff(myVar)
File "/home/ruedi/Dropbox/Reps/stuffed/sosy/testing/moduleB.py", line 7, in doStuff
assert aVariable == bVariable
AssertionError
取消注释枚举中的自定义相等运算符会导致断言失败。我发现类模块在两种情况下都不相同,因为在一种情况下它是“__main__”。
解决此问题的最“Pythonic 方式”是什么(除了将枚举移至其自己的模块)?
编辑:切换到“aVariable is bVariable”也不起作用:
Traceback (most recent call last):
File "./moduleA.py", line 17, in <module>
moduleB.doStuff(myVar)
File "/home/ruedi/Dropbox/Reps/stuffed/sosy/testing/moduleB.py", line 7, in doStuff
assert aVariable is bVariable
AssertionError
【问题讨论】: