【发布时间】:2020-05-11 22:56:07
【问题描述】:
我希望每个枚举值都有一个带有内部属性的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 2
Log = 3, False # False is the value of the internal property for value 3
问题是,目前为了创建此类的实例,我需要:
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,应该如此)。
这里的问题是感觉效率不高,每次访问internal_property 时都执行那些if 语句。有没有其他方法可以使Enum 将internal_property 视为实例的额外字段(在Enum 常规name 和value 字段之上)?
【问题讨论】:
标签: python python-3.x enums properties