如何在Python中为自定义可调用类型添加类型标注
为Foo类添加类型标注的实现
from typing import Callable, ParamSpec, TypeVar # 定义参数规格和返回值类型变量,用于匹配被封装函数的签名 P = ParamSpec("P") R = TypeVar("R") class Foo: my_attr: str callable: Callable[P, R] def __init__(self, callable: Callable[P, R]) -> None: self.my_attr = "hi" self.callable = callable def __call__(self, *args: P.args, **kwargs: P.kwargs) -> R: # 调用被封装的函数 return self.callable(*args, **kwargs)
标注说明
- 用
ParamSpec("P")和TypeVar("R")实现泛型匹配,确保Foo实例的__call__方法签名和传入的可调用对象完全一致。 - 类属性
my_attr直接标注为str,明确其字符串类型。 __init__的callable参数标注为Callable[P, R],绑定泛型参数与返回值。__call__方法通过*args: P.args和**kwargs: P.kwargs匹配被封装函数的参数,返回值标注为R,和被封装函数的返回值类型保持统一。
内容的提问来源于stack exchange,提问作者Bashir Abdelwahed
相关产品推荐
相关产品推荐

