Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在枚举中搜索值_Python_Python 2.7 - Fatal编程技术网

Python 在枚举中搜索值

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

我是python新手。我试图检查字符串是否在枚举中定义了任何匹配值。例如,我想在下面的代码中打印“find”

我添加了以下隐式方法的定义,以支持比较、哈希和get方法


从枚举导入枚举
类状态(枚举):
已完成状态='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
方法