You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:54:18