Python枚举用于布尔变量

use*_*773 3 python enums boolean

我正在使用类enum.Enum来创建具有所选成员的变量.

主要原因是我的团队中的其他开发人员可以通过为变量选择一个允许的成员来使用相同的约定.

我想以相同的方式创建一个布尔变量,使其他开发人员可以选择True或False.

是否可以定义一个将接收True False选项的枚举?还有更好的选择吗?

以下选项不起作用:

boolean_enum = Enum('boolean_enum','True False')

boolean_enum = Enum('boolean_enum',True False)

mis*_*sha 8

现在(python 3.6+)这可以通过使用更方便地实现enum.Flag

from enum import Flag

class Boolean(Flag):
    TRUE = True
    FALSE = False
Run Code Online (Sandbox Code Playgroud)

enum.Flagover的另一个好处enum.Enum是它从一开始就支持(并在其下封闭)按&,|,~位运算符 ( ):

>>> Boolean.TRUE & Boolean.FALSE
Boolean.FALSE
>>> Boolean.TRUE | Boolean.FALSE
Boolean.TRUE
>>> ~Boolean.FALSE
Boolean.TRUE
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅https://docs.python.org/3/library/enum.html#enum.Flag


Era*_*ran 5

boolean_enum = Enum('boolean_enum', [('True', True), ('False', False)])
Run Code Online (Sandbox Code Playgroud)

查看此API的文档:https://docs.python.org/3/library/enum.html#functional-api

如果只为names参数指定"True False",则会为它们分配自动枚举值(1,2),这不是您想要的.而对于courase,你不能只发送True False而不是names参数的字符串参数.

所以你想要的是允许你指定名称和值的选项之一,如上所述.

编辑:
如上所述,枚举元素不可访问boolean_enum.True(但可以通过boolean_enum['True']或访问boolean_enum(True)).
要避免此问题,可以更改字段名称并将其定义为

Enum('boolean_enum', [('TRUE', True), ('FALSE', False)])
Run Code Online (Sandbox Code Playgroud)

然后作为boolean_enum.TRUEboolean_enum['TRUE']或访问boolean_enum(True)