PyCharm 的 type hint 不支持 typed version of namedtuple 吗?

这个问题最近很困扰我。 img img


PyCharm 的 type hint 不支持 typed version of namedtuple 吗?
3 回复

我理解你的问题。PyCharm 对 typed namedtuple 的类型提示支持确实有限,主要是因为 typing.NamedTuplecollections.namedtuple 在类型推断上存在差异。

核心问题: typing.NamedTuple 有完整的类型注解支持,但 collections.namedtuple 的 typed version(通过 typing.NamedTuple 创建)在某些情况下 PyCharm 的类型检查器可能无法完全识别。

解决方案:

  1. 使用 typing.NamedTuple(推荐):
from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int

p = Point(1, 2)  # PyCharm 能正确推断类型
  1. 明确类型注解: 如果必须用 collections.namedtuple,可以手动添加类型提示:
from collections import namedtuple
from typing import Tuple

Point = namedtuple('Point', ['x', 'y'])
p: Tuple[int, int] = Point(1, 2)  # 或使用 TypeAlias
  1. 更新 PyCharm 和类型存根: 确保使用最新版 PyCharm,并检查项目是否安装了正确的类型存根文件。

总结: 优先用 typing.NamedTuple 替代传统的 typed namedtuple。


pycharm 其实很久之前就收到 BUG 反馈了但是一直没修掉…

心好累

回到顶部