如何迭代 Python 枚举而忽略“已弃用”的枚举?

Mic*_*ael 1 python enums python-3.x

如果我有一个像这样设置的枚举类


class fruits(enum.IntEnum):
    apples = 0
    bananas = 1  # deprecated
    pears = 2  # deprecated
    strawberries = 3
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以动态获取未弃用的枚举(基本上只获取苹果和草莓?它们仅通过注释进行标记,我不喜欢创建一组“已弃用”通知

Eth*_*man 5

您将需要一些额外的代码来支持该用例。我将使用1来展示它:aenum

from aenum import IntEnum

class Fruits(IntEnum):
    _init_ = 'value active'
    #
    apples = 0, True
    bananas = 1, False  # deprecated
    pears = 2, False    # deprecated
    strawberries = 3, True
    #
    @classmethod
    def active(cls):
        return [m for m in cls if m.active]
    #
    @classmethod
    def deprecated(cls):
        return [m for m in cls if not m.active]
Run Code Online (Sandbox Code Playgroud)

并在使用中:

>>> list(Fruits)
[<Fruits.apples: 0>, <Fruits.bananas: 1>, <Fruits.pears: 2>, <Fruits.strawberries: 3>]

>>> Fruits.apples
<Fruits.apples: 0>

>>> Fruits.bananas
<Fruits.bananas: 1>

>>> Fruits.active()
[<Fruits.apples: 0>, <Fruits.strawberries: 3>]

>>> Fruits.deprecated()
[<Fruits.bananas: 1>, <Fruits.pears: 2>]
Run Code Online (Sandbox Code Playgroud)

1声明:我是Python stdlibEnumenum34backportAdvanced Enumeration ( aenum)( stdlib 的直接替代品enum的作者。