python - python 中的枚举有什么好的用例?

标签 python enums

我已经编写 Python 2 代码大约 3 年了,虽然我很早就知道枚举,但我们已经开始在我们的项目中使用它们(向后移植 - pypi 包 enum34 )。

我想了解何时使用它们。

我们开始使用它们的一个地方是将一些 postgres 数据库级枚举映射到 python 枚举。因此我们有这个枚举类

class Status(enum.Enum):
    active = 'active'
    inactive = 'inactive'

但是当使用这些时,我们最终是这样使用它们的:

if value == Status.active.value:
    ...

所以在这种情况下使用枚举不如使用更简单的类有用,就像这样

class Status(object):
    active = 'active'
    inactive = 'inactive'

因为我们可以更轻松地使用它,例如 value == Status.active

到目前为止,我发现这个唯一有用的地方——虽然没有我想要的那么有用——是在文档字符串中。我可以声明我的形式参数需要 Status 枚举的成员,而不是明确地说允许的值是“事件”和“非事件”(当存在更多状态时更有帮助)

所以我真的不知道它们的确切用例是什么——我不知道它们比字符串常量好在哪里。

简而言之:什么时候使用枚举?

最佳答案

几点:

  • 您的Enum 类可以将str 用作mixin。
  • 一些数据库层允许将存储的数据转换为 Python 数据类型。

对于第一点:

class Status(str, Enum):
    active = 'active'
    inactive = 'inactive'

...

if value == Status.active:
    ...

对于第二点:

我在这方面经验不多,但我相信 SQLAlchemy 会做到这一点。

关于python - python 中的枚举有什么好的用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41725597/

相关文章:

c++ - 初始化与枚举关联的值的最佳方法是什么?

Java 1.5 枚举 : Why can't I use 'findBy' with 1. 5 个枚举?

python - 在枚举构造函数中使用 super() 时出现 NameError

c# - 来自枚举的单选按钮组

python - 将 12 小时日期/时间字符串转换为 24 小时日期时间

c# - 使用隐式枚举字段来表示数值是一种不好的做法吗?

python - 使用 3 个索引对 4 维数组进行切片时会发生什么?

python - 使用 hdf5storage 从 Python 创建 .mat v7.3 文件

python - 使用 Psycopg2 获取所有模式的名称

python - 检查列表范围是否在另一个列表范围内