1 回答

TA贡献1833条经验 获得超4个赞
元级Enum,EnumMeta定义了__contains__测试魔术方法,如果一个Enum实例是一个给定的成员Enum仅基于成员的名称,而不是值类,所以如果你希望它能够基于值测试会员,你将有EnumMeta.__contains__使用遍历_member_map_dict 属性值的函数进行覆盖,并将每个成员值与给定的测试值进行比较以实现:
from enum import Enum, EnumMeta
def custom_EnumMeta__contains__(cls, member):
return isinstance(member, cls) and member.name in cls._member_map_ or \
any(m._value_ == member for m in cls._member_map_.values())
EnumMeta.__contains__ = custom_EnumMeta__contains__
class States(Enum):
COMPLETED_STATE = 'completed'
DEPENDENCY_WAIT_STATE = 'dependency_wait'
FAILED_NO_RERUN_STATE = 'failed_no_rerun'
IGNORED_STATE = 'ignored'
RUNNING_STATE = 'running'
NEVER_RUN_STATE = 'never_run'
ON_HOLD_STATE = 'on_hold'
if 'running' in States:
print "Found"
if States.RUNNING_STATE in States:
print "Found here"
这输出:
Found
Found here
添加回答
举报