封装我正在使用的状态列表enum
模块:
from enum import Enum
class MyEnum(Enum):
state1='state1'
state2 = 'state2'
state = MyEnum.state1
MyEnum['state1'] == state # here it works
'state1' == state # here it does not throw but returns False (fail!)
但是,问题是我需要在脚本的许多上下文中无缝地使用这些值作为字符串,例如:
select_query1 = select(...).where(Process.status == str(MyEnum.state1)) # works but ugly
select_query2 = select(...).where(Process.status == MyEnum.state1) # throws exeption
如何避免调用额外的类型转换(str(state)
上面)或基础价值(state.value
)?
看来继承就够了str
同时上课Enum
:
from enum import Enum
class MyEnum(str, Enum):
state1 = 'state1'
state2 = 'state2'
棘手的部分是命令继承链中的类很重要像这样:
class MyEnum(Enum, str):
state1 = 'state1'
state2 = 'state2'
throws:
TypeError: new enumerations should be created as `EnumName([mixin_type, ...] [data_type,] enum_type)`
使用正确的类进行以下操作MyEnum
很好:
print('This is the state value: ' + state)
作为旁注,似乎不需要特殊的继承技巧格式化字符串 https://www.python.org/dev/peps/pep-0498/甚至适用于Enum
仅继承:
msg = f'This is the state value: {state}' # works without inheriting from str
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)