Python如何实现自定义参数类型提示SingleOrSequence简化类型声明
实现方案
原生泛型别名实现(最Pythonic,推荐)
typing模块原生支持该场景,不需要自定义类,直接使用泛型类型别名即可实现需求,不同Python版本写法如下:
Python 3.12+(PEP 695 泛型别名语法)
from collections.abc import Sequence type SingleOrSequence[T] = T | Sequence[T]
Python 3.10 ~ 3.11
from collections.abc import Sequence from typing import TypeVar T = TypeVar("T") SingleOrSequence = T | Sequence[T]
Python 3.9及更低版本
from collections.abc import Sequence from typing import TypeVar, Union T = TypeVar("T") SingleOrSequence = Union[T, Sequence[T]]
以上所有写法均可直接按照你期望的方式调用,主流静态类型检查器(mypy、pyright等)均可正确识别:
my_dicts: SingleOrSequence[dict[str, int]] # 等价于 my_dicts: Union[dict[str, int], Sequence[dict[str, int]]]
你之前自定义类的实现虽然运行时可以正常工作,但大部分静态类型检查器无法正确解析其返回的类型,不推荐生产环境使用。
可选调整
如果希望接受的序列仅包含可变序列(如list,排除tuple、str等不可变序列),将代码中的Sequence替换为MutableSequence即可。
内容的提问来源于stack exchange,提问作者RxHEAD
相关产品推荐
相关产品推荐

