使用 FunctionalAPI 时如何装饰我的枚举?

How can I decorate my enum when using FunctionalAPI?

from enum import IntEnum, unique

# @unique <- decorator syntax does not work for variable assignment
Weekday = IntEnum("Weekday", "sun mon tue wed thu fri sat", start=0)

显然可以将其写成 class 但我想知道是否可以使用上面所示的语法。

https://docs.python.org/3/library/enum.html#functional-api

您可以将其用作函数而不是装饰器。

Weekday = unique(IntEnum("Weekday", "sun mon tue wed thu fri sat", start=0))

但是,这不是必需的:使用 Functional API 可以保证每个值都是唯一的。这是在 _generate_next_value_enum.py.

中完成的

创建 IntEnum 调用 __call__

def __call__(cls, value, names=None, *, ..., start=1):

调用 cls._create_

def _create_(cls, class_name, names, *, ..., start=1):

在循环中调用_generate_next_value_以递增顺序赋值

for count, name in enumerate(original_names):
    first_enum._generate_next_value_(name, start, count, last_values[:])