首页 > 解决方案 > 将字符串列表转换为“IntFlag”

问题描述

我有一堆IntFlag类型,我希望经常将配置文件中的字符串列表转换为这些类型的成员。我目前的计划是扩展IntFlag

class BetterIntFlag(IntFlag):
    @classmethod
    def parse(cls, items):
        value = cls(0)
        for item in items:
            value |= cls[item]
        return value

我对这个解决方案很满意,但我不禁觉得我一定错过了一种简洁的内置方式来做到这一点。

我在 3.3 上使用向后移植的枚举。

标签: pythonenums

解决方案


如果通过 backport 你的意思是aenum1,它是内置的:

from aenum import IntFlag

class Color(IntFlag):
  red = 1
  green = 2
  blue = 4

并在使用中:

--> Color['red|blue']
<Color.blue|red: 5>

--> items = ['red', 'blue']
--> Color['|'.join(items)]
<Color.blue|red: 5>

1披露:我是Python stdlibEnumenum34backportAdvanced Enumeration ( aenum) 库的作者。


推荐阅读