为可能未加载的模块中的类型键入提示?
Type hints for types from modules which may not be loaded?
如何定义类型提示以在未导入 Geopandas 时仍将 GeoPandas GeoDataFrame 指定为选项但不报错? IE: 定义一个不存在模块的类型提示
给定一个 class,它接受类型为 DataFrame 或 GeoDataFrame 的参数,通常只会导入 Pandas,但偶尔也会导入 GeoPandas。
class 必须能够互换取一帧。如果param定义为:Union[pandas.Dataframe, geopandas.geodataframe.GeoDataFrame]
没有导入GeoPandas时会报错,反之亦然。 Pandas 或 Geopandas 不会仅出于类型提示的目的而导入。
Any
是定义 geopandas 数据框的选项,但我希望更简洁。 Union[pandas.Dataframe, Any]
感觉毫无意义,因为它不提供替代参数可能是什么类型的上下文,并且不涵盖加载 Geopandas 而不是 Pandas.
的情况
我看过,但情况不一样。
假设 Python >= 3.7,添加一个 from __future__ import annotations
导入以推迟类型提示评估。这意味着如果您在类型提示中引用未加载的对象,解释器实际上不会抱怨。
下面的代码执行得很好,不需要任何额外的导入:
from __future__ import annotations
from typing import Union
def main(data: Union[str, pd.DataFrame]) -> None:
print(data)
if __name__ == '__main__':
main('some_data_here')
此行为是从 Python 3.10 开始的默认行为,这意味着我们不需要将来的导入,但已推迟到 Python 3.11。
(另外请注意,技术上您不需要使用 Union[pandas.Dataframe, geopandas.geodataframe.GeoDataFrame]
- 使用 DataFrame
类型提示就足够了,因为 GeoDataFrame
是 DataFrame
).
如何定义类型提示以在未导入 Geopandas 时仍将 GeoPandas GeoDataFrame 指定为选项但不报错? IE: 定义一个不存在模块的类型提示
给定一个 class,它接受类型为 DataFrame 或 GeoDataFrame 的参数,通常只会导入 Pandas,但偶尔也会导入 GeoPandas。
class 必须能够互换取一帧。如果param定义为:Union[pandas.Dataframe, geopandas.geodataframe.GeoDataFrame]
没有导入GeoPandas时会报错,反之亦然。 Pandas 或 Geopandas 不会仅出于类型提示的目的而导入。
Any
是定义 geopandas 数据框的选项,但我希望更简洁。 Union[pandas.Dataframe, Any]
感觉毫无意义,因为它不提供替代参数可能是什么类型的上下文,并且不涵盖加载 Geopandas 而不是 Pandas.
我看过
假设 Python >= 3.7,添加一个 from __future__ import annotations
导入以推迟类型提示评估。这意味着如果您在类型提示中引用未加载的对象,解释器实际上不会抱怨。
下面的代码执行得很好,不需要任何额外的导入:
from __future__ import annotations
from typing import Union
def main(data: Union[str, pd.DataFrame]) -> None:
print(data)
if __name__ == '__main__':
main('some_data_here')
此行为是从 Python 3.10 开始的默认行为,这意味着我们不需要将来的导入,但已推迟到 Python 3.11。
(另外请注意,技术上您不需要使用 Union[pandas.Dataframe, geopandas.geodataframe.GeoDataFrame]
- 使用 DataFrame
类型提示就足够了,因为 GeoDataFrame
是 DataFrame
).