Почему в правиле Python 3 равномерно не проверяется правильность границ модуля, если перечисление было определено в основном модуле? Вот пример:Python Enums через модули
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
Разоблачение пользовательского оператора равенства в перечислении приводит к ошибке утверждения там. Я обнаружил, что модуль класса не является одинаковым в обоих случаях, так как это «__main__» в одном случае.
Что является самым «путинским способом» для устранения этой проблемы (кроме перемещения перечисления в собственный модуль)?
EDIT: Переключение на "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