是否存在可用于以下函数format_enum_as_list_with_quotes的通用枚举type:

from enum import Enum, EnumMeta


class Demo(str, Enum):
    one = "one"
    two = "two"
    three = "three"


def format_enum_as_list_with_quotes (items: EnumMeta) -> str:
    return ", ".join([f"\"{item.value}\"" for item in items])
#                               ^^^^^ Cannot access member "value" for type "EnumMeta"
#                                     Member "value" is unknown


def format_enum_as_list_with_quotes_2 (items: Enum) -> str:
    return ", ".join([f"\"{item.value}\"" for item in items])
#                                                     ^^^^^ "Enum" is not iterable
#                                                           "__iter__" method not defined


print(type(Demo))  # => EnumMeta
assert format_enum_as_list_with_quotes(Demo) == '"one", "two", "three"'

**编辑**

代码执行得很好,我只是想消除类型错误.

在带有Python 3.10.11的Visual Studio代码中显示的类型错误来自于Pylance v2024.2.2

推荐答案

Enum是非常特殊的语言 struct ,在类型判断器中也是特殊情况.虽然type(Demo)EnumMeta是正确的(这是真正的实现方式-枚举有一个特殊的元类),但类型判断器不足以像type[Enum]那样解释它.后者应该为您的问题提供解决方案:

def format_enum_as_list_with_quotes(items: type[Enum]) -> str:
    return ", ".join(f"\"{item.value}\"" for item in items)

(在Python 3.8及以下版本中使用typing.Type而不是type).注意,我go 掉了上面的方括号--不需要构造一个列表,直接加入一个生成器即可.

这通过了mypy(playground)和pyright(here).

Python相关问答推荐

如何使用symy打印方程?

由于NEP 50,向uint 8添加-256的代码是否会在numpy 2中失败?

抓取rotowire MLB球员新闻并使用Python形成表格

图像 pyramid .难以创建所需的合成图像

Python键入协议默认值

Pre—Commit MyPy无法禁用非错误消息

从spaCy的句子中提取日期

Scrapy和Great Expectations(great_expectations)—不合作

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

让函数调用方程

解决调用嵌入式函数的XSLT中表达式的语法移位/归约冲突

如何使regex代码只适用于空的目标单元格

Python Tkinter为特定样式调整所有ttkbootstrap或ttk Button填充的大小,适用于所有主题

Flash只从html表单中获取一个值

python sklearn ValueError:使用序列设置数组元素

将一个双框爆炸到另一个双框的范围内

在我融化极点数据帧之后,我如何在不添加索引的情况下将其旋转回其原始形式?

如何训练每一个pandaprame行的线性回归并生成斜率

如何用FFT确定频变幅值

如何根据一定条件生成段id