代码之家  ›  专栏  ›  技术社区  ›  Thom Smith

将字符串列表转换为“intflag”`

  •  2
  • Thom Smith  · 技术社区  · 5 年前

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

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

    我对这个解决方案很满意,但我禁不住觉得我一定缺少一种简洁的内置方式来实现这一点。

    我在3.3号,有反向的枚举。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Ethan Furman    5 年前

    如果你说的是反向端口 aenum ,内置:

    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>
    

    披露:我是 Python stdlib Enum ,的 enum34 backport Advanced Enumeration ( aenum ) 图书馆。