Perché può in Python dell'uguaglianza 3 enum non essere controllato in modo corretto attraverso i confini del modulo se l'enum è stato definito nel modulo principale? Ecco un esempio:Python enumerazioni attraverso moduli
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
Calling "./moduleA.py" sui rendimenti della riga di comando:
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
decommentando l'operatore di uguaglianza personalizzato nella enum porta ad un'affermazione fail lì. Ho trovato che il modulo di classe non è lo stesso in entrambi i casi, in quanto è "__main__" in un caso.
Qual è la "via Pythonic" la maggior parte per risolvere questo problema (altro che spostare l'enumerazione al proprio modulo)?
EDIT: passaggio a "avariable è bVariable" non funziona neanche:
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