首页 > 解决方案 > 如何迭代 Python 枚举而忽略“已弃用”的枚举?

问题描述

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


class fruits(enum.IntEnum):
    apples = 0
    bananas = 1  # deprecated
    pears = 2  # deprecated
    strawberries = 3

有没有办法动态获取未弃用的枚举(基本上只获取苹果和草莓?它们仅通过注释标记,我不想创建一组“弃用”通知

标签: pythonpython-3.xenums

解决方案


您需要一些额外的代码来支持该用例。我将使用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]

并在使用中:

>>> 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>]

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


推荐阅读