from enum import EnumMeta, IntEnum
class DefaultEnumMeta(EnumMeta):
def __call__(cls, value=None, *args, **kwargs):
if value is None:
# Assume the first enum member is default
return next(iter(cls))
return super().__call__(value, *args, **kwargs)
class MyEnum(IntEnum, metaclass=DefaultEnumMeta):
A = 0
B = 1
C = 2
assert MyEnum() is MyEnum.A
assert MyEnum(0) is MyEnum.A
assert MyEnum(1) is not MyEnum.A
ZnJvbSBlbnVtIGltcG9ydCBFbnVtTWV0YSwgSW50RW51bQoKCmNsYXNzIERlZmF1bHRFbnVtTWV0YShFbnVtTWV0YSk6CiAgICBkZWYgX19jYWxsX18oY2xzLCB2YWx1ZT1Ob25lLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CiAgICAgICAgICAgICMgQXNzdW1lIHRoZSBmaXJzdCBlbnVtIG1lbWJlciBpcyBkZWZhdWx0CiAgICAgICAgICAgIHJldHVybiBuZXh0KGl0ZXIoY2xzKSkKICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2NhbGxfXyh2YWx1ZSwgKmFyZ3MsICoqa3dhcmdzKQoKCmNsYXNzIE15RW51bShJbnRFbnVtLCBtZXRhY2xhc3M9RGVmYXVsdEVudW1NZXRhKToKICAgIEEgPSAwCiAgICBCID0gMQogICAgQyA9IDIKCgphc3NlcnQgTXlFbnVtKCkgaXMgTXlFbnVtLkEKYXNzZXJ0IE15RW51bSgwKSBpcyBNeUVudW0uQQphc3NlcnQgTXlFbnVtKDEpIGlzIG5vdCBNeUVudW0uQQ==