1 回答

TA貢獻1833條經驗 獲得超4個贊
元級Enum,EnumMeta定義了__contains__測試魔術方法,如果一個Enum實例是一個給定的成員Enum僅基于成員的名稱,而不是值類,所以如果你希望它能夠基于值測試會員,你將有EnumMeta.__contains__使用遍歷_member_map_dict 屬性值的函數(shù)進行覆蓋,并將每個成員值與給定的測試值進行比較以實現(xiàn):
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
添加回答
舉報