有没有办法为python枚举指定默认值? [英] Is there a way to specify a default value for python enums?
本文介绍了有没有办法为python枚举指定默认值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
给出以下枚举:
class MyEnum(IntEnum):
A = 0
B = 1
C = 2
如何指定默认值。我希望能够做到:
How can I specify a default value. I want to be able to do:
my_val = MyEnum()
并具有 my_val
为< MyEnum.A:0>
这可能吗?我尝试自定义 __ new __
, __ init __
, __ call __
,但是我无法使其正常工作。
Is this possible? I've tried customizing __new__
, __init__
, __call__
but I can't get it to work.
推荐答案
MyEnum(..)
由 EnumMeta .__ call __
。您需要重写该方法:
MyEnum(..)
is handled by EnumMeta.__call__
. You need to override that method:
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
这篇关于有没有办法为python枚举指定默认值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文