有没有办法为python枚举指定默认值? [英] Is there a way to specify a default value for python enums?

查看:266
本文介绍了有没有办法为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆