我可以使用 Typing_extensions 中的实验类型吗?

Chr*_*ing 5 python python-typing

更具体:

要解决诸如如何使用封闭类的类型键入提示方法之类的问题?
PEP 673介绍typing.Self。PEP 是一个草案,但目前它是 Typing_extensions 4.0.0 中的实验类型

我尝试在 python 3.8 中使用它

@dataclasses.dataclass
class MenuItem:
    url: str
    title: str
    description: str = ""
    items: typing.List[typing_extensions.Self] = dataclasses.field(default_factory=list)
Run Code Online (Sandbox Code Playgroud)

但它提高了

TypeError: Plain typing_extensions.Self is not valid as type argument
Run Code Online (Sandbox Code Playgroud)

我可以只使用文字字符串“MenuItem”来代替。但我想知道为什么这不起作用。

Chr*_*ing 3

是的,可以,但要注意该包的用途:

typing_extensions模块有两个相关的用途:

  • 允许在较旧的 Python 版本上使用新类型系统功能。例如, typing.TypeGuard它是 Python 3.10 中的新功能,但 typing_extensions也允许使用早期 Python 版本的用户使用它。
  • 在新型系统 PEP 被接受并添加到typing模块之前,对其进行实验。

这个特定的情况是typing_extensions 中的一个错误。计划在 4.0.1 中修复

  • 我的版本是 4.3.0,但仍然出现错误。- 编辑:我的错误消息实际上是“变量“typing_extensions.Self”作为类型无效”,这表明它是 mypy 中的问题,而不是(不再)typing_extensions 中的问题。截至撰写本文时,修复此问题的拉取请求仍然开放:https://github.com/python/mypy/pull/11666 (5认同)