爲什麼在Python 3中枚舉相等性不能在模塊邊界上正確檢查,如果在主模塊中定義了枚舉?下面是一個例子:跨模塊的Python枚舉
moduleA.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)
moduleB.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
取消註釋enum中的自定義相等運算符會導致斷言失敗在那裏。我發現在這兩種情況下類模塊都不一樣,因爲在一種情況下它是「__main__」。
什麼是解決這個問題的最「Python方法」(除了將枚舉移動到它自己的模塊之外)?
編輯:切換到 「aVariable是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