为了账号安全,请及时绑定邮箱和手机立即绑定

在枚举中搜索值

在枚举中搜索值

慕哥6287543 2022-01-05 11:28:02
我是python的新手。我正在尝试检查字符串是否具有在 Enum 中定义的任何匹配值。例如,我想在下面的代码中打印“找到”我添加了以下隐式方法的定义以支持比较、散列和获取方法from enum import Enumclass 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'    def __hash__(self):        return hash(self.value)    def __str__(self):        return self.value    def __eq__(self, other):        if type(self) == type(other):            return self.value == other.value        return self.value == other    def __get__(self, *args, **kwargs):        return self.valueMap = {    States.ON_HOLD_STATE: [States.NEVER_RUN_STATE],    States.DISABLED_STATE: [States.NEVER_RUN_STATE],    States.RUNNING_STATE: [States.DEPENDENCY_WAIT_STATE,                           States.ON_HOLD_STATE,                           States.NEVER_RUN_STATE],    States.IGNORED_STATE: [States.RUNNING_STATE,                           States.NEVER_RUN_STATE]}print(Map[States.RUNNING_STATE]) // ['dependency_wait', 'on_hold', 'never_run']print(Map['running']) // ['dependency_wait', 'on_hold', 'never_run']print(States.RUNNING_STATE == 'dependency_wait') // Falseprint(States.RUNNING_STATE == 'running') // Trueprint(States.RUNNING_STATE == States.RUNNING_STATE) // True if 'running' in States:    print "Found" // Does not gets printedif States.RUNNING_STATE in States:    print "Found here" // Does not gets printed
查看完整描述

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


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号