Python 布尔变量枚举
Python Enum for Boolean variable
我正在使用 class enum.Enum 来创建一个包含 selected 成员的变量。
主要是为了让我团队中的其他开发人员能够通过select使用变量的几个允许成员之一来使用相同的约定。
我想以同样的方式创建一个布尔变量,使其他开发人员能够 select True 或 False。
是否可以定义一个将接收 True False 选项的枚举?有没有更好的选择?
以下选项不起作用:
boolean_enum = Enum('boolean_enum', 'True False')
boolean_enum = Enum('boolean_enum', True False)
boolean_enum = Enum('boolean_enum', [('True', True), ('False', False)])
查看此 API 的文档:https://docs.python.org/3/library/enum.html#functional-api
如果您只为 names 参数指定 'True False',它们将被分配自动枚举值 (1,2),这不是您想要的。
当然,您不能只发送 True False 而不是 names 参数的字符串参数。
所以你想要的是允许你指定名称和值的选项之一,例如上面的。
编辑:
如上定义时,boolean_enum.True
无法访问枚举元素(但 boolean_enum['True']
或 boolean_enum(True)
可以访问它们)。
为避免此问题,可以更改字段名称并将其定义为
Enum('boolean_enum', [('TRUE', True), ('FALSE', False)])
然后访问为 boolean_enum.TRUE
或 boolean_enum['TRUE']
或 boolean_enum(True)
如今(python 3.6+)使用 enum.Flag
:
可以更方便地实现这一点
from enum import Flag
class Boolean(Flag):
TRUE = True
FALSE = False
enum.Flag
优于 enum.Enum
的一个额外好处是它从一开始就支持(并在其下关闭)位运算符 (&,|,~
):
>>> Boolean.TRUE & Boolean.FALSE
Boolean.FALSE
>>> Boolean.TRUE | Boolean.FALSE
Boolean.TRUE
>>> ~Boolean.FALSE
Boolean.TRUE
有关详细信息,请参阅 https://docs.python.org/3/library/enum.html#enum.Flag
我正在使用 class enum.Enum 来创建一个包含 selected 成员的变量。
主要是为了让我团队中的其他开发人员能够通过select使用变量的几个允许成员之一来使用相同的约定。
我想以同样的方式创建一个布尔变量,使其他开发人员能够 select True 或 False。
是否可以定义一个将接收 True False 选项的枚举?有没有更好的选择?
以下选项不起作用:
boolean_enum = Enum('boolean_enum', 'True False')
boolean_enum = Enum('boolean_enum', True False)
boolean_enum = Enum('boolean_enum', [('True', True), ('False', False)])
查看此 API 的文档:https://docs.python.org/3/library/enum.html#functional-api
如果您只为 names 参数指定 'True False',它们将被分配自动枚举值 (1,2),这不是您想要的。 当然,您不能只发送 True False 而不是 names 参数的字符串参数。
所以你想要的是允许你指定名称和值的选项之一,例如上面的。
编辑:
如上定义时,boolean_enum.True
无法访问枚举元素(但 boolean_enum['True']
或 boolean_enum(True)
可以访问它们)。
为避免此问题,可以更改字段名称并将其定义为
Enum('boolean_enum', [('TRUE', True), ('FALSE', False)])
然后访问为 boolean_enum.TRUE
或 boolean_enum['TRUE']
或 boolean_enum(True)
如今(python 3.6+)使用 enum.Flag
:
from enum import Flag
class Boolean(Flag):
TRUE = True
FALSE = False
enum.Flag
优于 enum.Enum
的一个额外好处是它从一开始就支持(并在其下关闭)位运算符 (&,|,~
):
>>> Boolean.TRUE & Boolean.FALSE
Boolean.FALSE
>>> Boolean.TRUE | Boolean.FALSE
Boolean.TRUE
>>> ~Boolean.FALSE
Boolean.TRUE
有关详细信息,请参阅 https://docs.python.org/3/library/enum.html#enum.Flag