【发布时间】:2021-11-10 00:55:51
【问题描述】:
我有这段代码,它的类型可以自行检查:
import pandas as pd
from typing import Tuple, Type
def df2objects(df: pd.DataFrame, object_type: Type[BaseObject]) -> Tuple[BaseObject, ...]:
return tuple(object_type(**kwargs) for kwargs in df.to_dict(orient='records')
但如果我尝试使用它:
def use_it(df: pd.DataFrame) -> Tuple[DerivedObject,...]:
return df2objects(df, DerivedObject)
我明白了
返回值类型不兼容(得到“Tuple[BaseObject, ...]”,预期为“Tuple[DerivedObject, ...]”)mypy(error)
我可以解决这个问题
import typing
def use_it(df: pd.DataFrame) -> Tuple[DerivedObject,...]:
return typing.cast(Tuple[DerivedObject,...], df2objects(df, DerivedObject))
但我真正想做的是指定 df2objects 返回一个 object_type 元组,如下所示:
def df2objects(df: pd.DataFrame, object_type: Type[BaseObject]) -> Tuple[object_type, ...]:
或者这个:
def df2objects(df: pd.DataFrame, object_type: Type[BaseObject]) -> Tuple[BaseObject, ...]:
return typing.cast(Tuple[object_type,...],tuple(object_type(**kwargs) for kwargs in df.to_dict(orient='records'))
当然,这些都不起作用。
【问题讨论】:
-
您也许可以使用
typing.TypeVar。
标签: python type-hinting python-typing