Ваш код не будет работать - перечисления не совсем классы:
@unique
class MyEnum(Enum):
ONE = 1
TWO = 2
THREE = 3
FOUR = 4
@unique
class MyTrySubset(Enum):
pass
for item in MyEnum:
setattr(MyTrySubset, item.name, item.value) # no duplication error by @unique
setattr(MyTrySubset, item.name+"a", item.value) # no duplication error by @unique
for s in MyTrySubset:
print(s) # no output - at all
for s in MyEnum:
print(s) # prints all repr() of all Enum-values defined
Используйте другое перечисление, чтобы объявить это (не сравниватьравно):
@unique
class MyDesiredSubset(Enum):
THREE = MyEnum.THREE
FOUR = MyEnum.FOUR
или используйте свободный подход:
MyOther = Enum("MyOther", [(a.name,a.value) for a in MyEnum
if a in [MyEnum.THREE,MyEnum.FOUR]] )
Если вместо этого вы используете IntEnum
, вы можете даже сравнить их:
@unique
class MyIntEnum(IntEnum):
ONE = 1
TWO = 2
THREE = 3
FOUR = 4
@unique
class MyDesiredIntSubset(IntEnum):
THREE = MyIntEnum.THREE
FOUR = MyIntEnum.FOUR
print(MyDesiredSubset.THREE == MyEnum.THREE) # False
print(MyDesiredIntSubset.THREE == MyIntEnum.THREE) # True
print(MyDesiredIntSubset.THREE == 3) # True @Steven Rumbalski