python - 如何迭代忽略 "deprecated"的 Python 枚举?

标签 python python-3.x enums

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


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

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

最佳答案

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

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 stdlib Enum 的作者, enum34 backport , 和 Advanced Enumeration (aenum)(stdlib enum 的替代品)

关于python - 如何迭代忽略 "deprecated"的 Python 枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59057421/

相关文章:

python - 使用 Click 制作简洁、可安装的 Python 库

python - 必须有一个更优化的方法来解析两个文件

python - 如何将行分为 10 分钟间隔?

python 3 : Solving arrayChange in CodeFights

objective-c - Objective-C 中有类似 Java 枚举的东西吗?

python - 在 lightgbm 中实现自定义 huber 损失

python - 在 Jython 上使用 Django 管理.py runserver

python-3.x - python中简单实现线性回归时出现溢出错误

c - sizeof(enum) == sizeof(int) 总是这样吗?

C++ 将值设置为类内的枚举项