Python 在枚举中搜索值
我是python新手。我试图检查字符串是否在枚举中定义了任何匹配值。例如,我想在下面的代码中打印“find” 我添加了以下隐式方法的定义,以支持比较、哈希和get方法Python 在枚举中搜索值,python,python-2.7,Python,Python 2.7,我是python新手。我试图检查字符串是否在枚举中定义了任何匹配值。例如,我想在下面的代码中打印“find” 我添加了以下隐式方法的定义,以支持比较、哈希和get方法 从枚举导入枚举 类状态(枚举): 已完成状态='COMPLETED' DEPENDENCY_WAIT_STATE='DEPENDENCY_WAIT' FAILED_NO_RERUN_STATE='FAILED_NO_RERUN' 忽略状态='IGNORED' 运行状态='RUNNING' 从不运行状态='从不运行' ON_HOL
从枚举导入枚举
类状态(枚举):
已完成状态='COMPLETED'
DEPENDENCY_WAIT_STATE='DEPENDENCY_WAIT'
FAILED_NO_RERUN_STATE='FAILED_NO_RERUN'
忽略状态='IGNORED'
运行状态='RUNNING'
从不运行状态='从不运行'
ON_HOLD_STATE='ON_HOLD'
定义散列(自我):
返回散列(self.value)
定义(自我):
回归自我价值
定义(自身、其他):
如果类型(自身)=类型(其他):
返回self.value==other.value
返回self.value==其他
定义获取(self,*args,**kwargs):
回归自我价值
地图={
States.ON_HOLD_STATE:[States.NEVER_RUN_STATE],
States.DISABLED\u STATE:[States.NEVER\u RUN\u STATE],
States.RUNNING_STATE:[States.DEPENDENCY_WAIT_STATE,
州,待命州,
状态。从不运行状态],
States.IGNORED_STATE:[States.RUNNING_STATE,
状态。从不运行状态]
}
打印(映射[States.RUNNING\u STATE])/['dependency\u wait','on\u hold','never\u run']
打印(映射['running'])/['dependency\u wait'、'on\u hold'、'never\u run']
打印(States.RUNNING_STATE=='dependency_wait')//False
打印(States.RUNNING_STATE=='RUNNING')//True
打印(States.RUNNING\u STATE==States.RUNNING\u STATE)//True
如果处于“运行”状态:
打印“找到”//未打印
如果States.RUNNING_STATE处于以下状态:
打印“在此处找到”//不会被打印
Enum的元类,EnumMeta
定义了\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
魔术方法,用于测试Enum
实例是否是给定Enum
类的成员,只基于成员的名称,而不是值,因此如果希望它能够基于值测试成员身份,您必须重写EnumMeta.\uuuu包含一个函数,该函数迭代\u member\u map\uu
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
是否可以尝试从类中删除重写的方法并再次检查?特别是\uuuu eq\uuuu
和\uuuu get\uuuu
方法