【问题标题】:Python how to list an array and make them an EnumPython如何列出一个数组并使它们成为枚举
【发布时间】:2026-02-10 13:20:06
【问题描述】:

所以我正在努力实现这样的目标

from enum import Enum

tabulate_formats = ['fancy_grid', 'fancy_outline', 'github', 'grid']

class TableFormat(str, Enum):
    for item in tabulate_formats:
        exec(f"{item} = '{item}'")

虽然我得到了这个错误

Traceback (most recent call last):
  File "/app/src/main.py", line 25, in <module>
    class TableFormat(str, Enum):
  File "/app/src/main.py", line 26, in TableFormat
    for item in tabulate_formats:
  File "/usr/local/lib/python3.6/enum.py", line 92, in __setitem__
    raise TypeError('Attempted to reuse key: %r' % key)
TypeError: Attempted to reuse key: 'item'

我如何正确地将它们分配到类中

【问题讨论】:

    标签: python enums


    【解决方案1】:

    不确定这是否也可以接受,但基于turning a dict into an Enum,您可以这样做:

    TableFormat = Enum('TableFormat', {i:i for i in tabulate_formats})
    

    【讨论】:

      【解决方案2】:
      class StrEnum(str, Enum):
          @staticmethod
          def _generate_next_value_(name, *args):
              return name
      
      TableFormat = StrEnum('TableFormat', tabulate_formats)
      

      >>> list(TableFormat)
      [<TableFormat.fancy_grid: 'fancy_grid'>, <TableFormat.fancy_outline: 'fancy_outline'>, <TableFormat.github: 'github'>, <TableFormat.grid: 'grid'>]
      

      【讨论】: