MyEnum(..)
由处理EnumMeta.__call__
。您需要重写该方法:
from enum import EnumMeta, IntEnum
class DefaultEnumMeta(EnumMeta):
default = object()
def __call__(cls, value=default, *args, **kwargs):
if value is DefaultEnumMeta.default:
# Assume the first enum is default
return next(iter(cls))
return super().__call__(value, *args, **kwargs)
# return super(DefaultEnumMeta, cls).__call__(value, *args, **kwargs) # PY2
class MyEnum(IntEnum, Metaclass=DefaultEnumMeta):
# __Metaclass__ = DefaultEnumMeta # PY2 with enum34
A = 0
B = 1
C = 2
assert MyEnum() is MyEnum.A
assert MyEnum(0) is MyEnum.A
assert MyEnum(1) is not MyEnum.A