在Python中,用类型提示注释路径的正确方式是什么?

36

如何用Python3为这个简单的实用程序函数添加注释?它应该接受pathlib.Path对象以及任何其他常见传递路径的方式。

def read_json(path: <TYPE HINT>):
    with open(path, 'rb') as f:
        data = json.load(f)
    return data

在我看来,这个主题似乎还在不断变化中,我找不到一个收集这些信息的好地方。我对如何在Python 3.6、3.7和3.8中处理这个问题很感兴趣。

1个回答

65
我假设典型的路径对象可以是Pathstr,因此你可以使用Union。此外,更包容性的os.PathLike优先于pathlib.PathPython 3.10或更新版本:
import os

def read_json(path: str | os.PathLike):
    ...

Python 3.5 - 3.9:
import os
import typing

def read_json(path: typing.Union[str, os.PathLike]):
    ...

5
标准函数的类型注释是否有任何地方显示?我找不到,但是“复制open的注释”可能是一个好答案。 - Martin Bonner supports Monica
2
open 使用 file: _OpenFile 作为注释,该注释是联合类型 Union[AnyPath, int] - Diogo
10
我使用这个 PathLike = TypeVar("PathLike", str, pathlib.Path, None) - maf88
1
不必重复造轮子(@maf88),os模块有os.PathLike,它是pathlib.Path的超类,可以直接使用。我认为答案应该编辑为Union[str, os.PathLike] - YotamW Constantini
3
@YotamWConstantini 是的,但 Pathlike 在2019年不存在。 - Christian Sauer
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接