Python如何正确将列表元素批量转换为Enum枚举类成员
批量生成字符串类型Enum成员的解决方案
报错原因
你的代码报错核心是Enum类在定义阶段会拦截所有命名空间赋值操作:for循环的迭代变量item本身会被Enum识别为待注册的枚举成员,第一次循环赋值后,第二次循环要重新覆盖item的值,就触发了重名报错。
正确实现方式
方法1:使用Enum官方函数式API(推荐)
Enum本身支持直接调用构造函数动态生成类,是官方推荐的批量生成枚举的方案:
from enum import Enum tabulate_formats = ['fancy_grid', 'fancy_outline', 'github', 'grid'] # 第二个参数传入可迭代的(成员名, 成员值)元组,type参数指定父类为str TableFormat = Enum('TableFormat', ((item, item) for item in tabulate_formats), type=str)
生成的枚举和手动定义的完全一致:成员值为对应字符串,且所有枚举成员本身也是str子类的实例,满足你定义str类型Enum的需求。
方法2:类定义块内批量更新局部命名空间
如果你更习惯class声明的写法,可以一次性更新类局部命名空间,避免迭代变量被Enum拦截:
from enum import Enum tabulate_formats = ['fancy_grid', 'fancy_outline', 'github', 'grid'] class TableFormat(str, Enum): # 一次性把所有枚举成员加入局部命名空间,无中间迭代变量污染 locals().update({item: item for item in tabulate_formats})
内容的提问来源于stack exchange,提问作者edmamerto
相关产品推荐
相关产品推荐

