【问题标题】:Dynamically create an enum with custom values in Python? [duplicate]在 Python 中动态创建具有自定义值的枚举? [复制]
【发布时间】:2016-02-14 21:02:14
【问题描述】:

我想在运行时通过读取 YAML 文件中的值来创建枚举类型。所以我有这个:

# Fetch the values
v = {'foo':42, 'bar':24}

# Create the enum
e = type('Enum', (), v)

有合适的方法吗?我觉得打电话给type 不是一个很好的解决方案。

【问题讨论】:

  • 我不太清楚为什么您的Enum 具有分配了如此奇怪的值的e.fooe.bar 属性。根本不是Enum
  • @Nhor 那是什么?我正在从一个 C 库中编写一个包装器,其中有一些像 typedef enum {soda = 3423, flower = 5827, water = 999} articles_t; 这样的枚举(这显然是一个例子)

标签: python enums


【解决方案1】:

您可以使用Enum functional API 创建新的枚举类型:

In [1]: import enum

In [2]: DynamicEnum = enum.Enum('DynamicEnum', {'foo':42, 'bar':24})

In [3]: type(DynamicEnum)
Out[3]: enum.EnumMeta

In [4]: DynamicEnum.foo
Out[4]: <DynamicEnum.foo: 42>

In [5]: DynamicEnum.bar
Out[5]: <DynamicEnum.bar: 24>

In [6]: list(DynamicEnum)
Out[6]: [<DynamicEnum.foo: 42>, <DynamicEnum.bar: 24>]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-04-08
  • 2021-04-11
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
相关资源
最近更新 更多