Dlaczego w programie Python 3 równanie enum może nie być poprawnie sprawdzane w obrębie granic modułu, jeśli wyliczenie zostało zdefiniowane w module głównym? Oto przykład:Wyliczenia Pythona w modułach
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
Wywoływanie "./moduleA.py" na plony wiersza poleceń:
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
Odkomentowanie niestandardowego operatora równości w wyliczeniu prowadzi do niepowodzenia asercji jesteś tam. Odkryłem, że moduł klasy nie jest taki sam w obu przypadkach, ponieważ jest "__main__" w jednym przypadku.
Jaki jest najbardziej "Pythoniczny sposób" rozwiązania tego problemu (poza przeniesieniem enum do własnego modułu)?
EDIT: Przejście na "aVariable jest bVariable" nie działa albo:
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