次の列挙型が与えられます:
class MyEnum(IntEnum):
A = 0
B = 1
C = 2
デフォルト値を指定するにはどうすればよいですか。できるようにしたい:
my_val = MyEnum()
とされてmy_val
いる<MyEnum.A: 0>
これは可能ですか?私は、カスタマイズを試してみた__new__
、__init__
、__call__
私は仕事にそれを得ることができません。
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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加