【发布时间】:2017-02-20 07:06:48
【问题描述】:
我有复杂的 python enum,如下所示:
from enum import Enum
class Properties:
def __init__(self, name, v, k):
self.name = name
self.v = v
self.k = k
class EnzymeNames(Enum):
ENZYME_X = Properties("x", 0.2, 50)
ENZYME_Y = Properties("y", 1.5, 100)
@property
def v(self):
return self.value.v
@property
def k(self):
return self.value.k
def __str__(self):
return self.value.name
现在,我有一个特殊的功能可以通过它的名字获取enum:
def get_enzyme(name) -> EnzymeNames:
for e in EnzymeNames:
if str(e) == name:
return e
我想知道是否有任何简单/pythonic 的方式可以通过EnzymeNames('name') 或类似方式访问enum?
编辑:
我认为对于我想要实现的目标几乎没有混淆。我想按属性获取 EnzymeNames。例如,EnzymeNames('x') 应该给我 EnzymeNames.ENZYME_X。
我已经尝试过以下方法:
>>EnzymeNames('x')
ValueError: 'x' is not a valid EnzymeNames
>>EnzymeNames('ENZYME_X')
ValueError: 'ENZYME_X' is not a valid EnzymeNames
>>EnzymeNames['ENZYME_X']
KeyError: 'ENZYME_X'
【问题讨论】:
-
你可以做
EnzymeNames["ENZYME_X"] -
另外,由于
X和Y没有EnzymeNames就毫无意义,即它们不能不受约束地使用,我不会有那些额外的前缀,而是更喜欢Enzyme.X。 -
@SelçukCihan:我已经试过了。它给了我
ValueError: 'ENZYME_X' is not a valid EnzymeNames -
@AnttiHaapala:如果我尝试在不使用属性函数的情况下访问它们,我会收到错误
AttributeError: 'EnzymeNames' object has no attribute 'X'
标签: python python-3.x enums