Я хотел бы иметь Enum
с внутренним свойством для каждого значения перечисления, это свойство не может быть установлено или инициализировано пользователем, но как только пользователь создал Enum
из значения, он сможет чтобы прочитать (получить) это внутреннее свойство на основе значения.
например,
class Channels(Enum):
Email = 1, True # True is the value of the internal property for value 1
Sms = 2, True # True is the value of the internal property for value 1
Log = 3, False # False is the value of the internal property for value 1
Проблема в том, что в настоящее время для создания экземпляра этого класса мне нужно: x = Channels((1, True))
и плохо. Я хочу иметь возможность создавать экземпляры, такие как: x = Channels(1)
(т.е. True
является внутренним свойством 1, оно не должно быть указано пользователем).
Моя вторая попытка была:
class Channels2(Enum):
@DynamicClassAttribute
def internal_property(self):
if self.value == 1:
return True
elif self.value == 2:
return True
elif self.value == 3:
return False
Email = 1
Sms = 2
Log = 3
И, похоже, это работает (x = Channels(1)
работает, а x.internal_property
возвращает True
, как и должно быть).
Проблема здесь в том, что это не так эффективно, выполнять эти операторы if каждый раз при обращении к internal_property
. Есть ли другой способ заставить Enum
рассматривать internal_property
как дополнительное поле экземпляра (поверх Enum
normal name
и value
поля)?