如何为Python-Polars DataFrame的行值添加类型提示?
问题解答
直接用polars.DataFrame[MyType]的方式,没法让类型检查器把tbl.frame[1, :]识别为MyType——因为Polars原生的类型定义里,frame属性的索引操作返回的就是DataFrame,没有设计泛型参数的传递逻辑。
要实现你要的效果,有两种思路:
- 重新封装Polars API(推荐)
这是最可靠的方案,兼容性覆盖所有IDE和类型检查工具。你可以自定义一个泛型类,包装或继承polars.DataFrame,手动控制索引操作的返回类型。比如:
from typing import Generic, TypeVar import polars as pl T = TypeVar("T") class TypedDataFrame(pl.DataFrame, Generic[T]): @property def frame(self) -> "TypedDataFrame[T]": return self def __getitem__(self, key) -> T: # 这里根据实际逻辑把行数据转换成MyType实例 row_dict = super().__getitem__(key).to_dict() return MyType(**row_dict)
之后用tbl: TypedDataFrame[MyType] = TypedDataFrame([])声明变量,tbl.frame[1, :]就会被正确识别为MyType。
- 类型检查器扩展(不推荐)
部分类型检查器(比如mypy)支持自定义插件或者通过协变/逆变的TypeVar调整类型推断,但这种方式兼容性极差,不同IDE的支持程度不一样,还要额外配置工具,没法作为通用方案。
总之,要保证所有场景下的类型提示都准确,重新封装API是最优解。
内容的提问来源于stack exchange,提问作者lmonninger
相关产品推荐
相关产品推荐

