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

为创建跨进程共享对象的函数添加正确的类型提示

创建跨进程共享对象的函数添加正确的类型提示

这个函数是用来通过multiprocessing.managers.BaseManager创建跨进程共享对象的,要给它加上准确的类型提示,咱们可以用泛型类型来保证通用性和类型安全,具体实现如下:

首先,我们需要导入typing模块里的TypeVar和Callable来实现泛型支持,然后给函数加上类型标注:

from typing import TypeVar, Callable

# 定义泛型类型变量,代表构造函数返回的实例类型
T = TypeVar('T')

def create_shared_object(constructor: Callable[..., T]) -> T:
    from multiprocessing.managers import BaseManager

    BaseManager.register('name', constructor)
    manager = BaseManager()
    manager.start()
    
    return manager.name()

类型提示的解释:

  • T = TypeVar('T'):定义一个泛型类型变量T,它可以代表任意类型,这样我们的函数就能适配各种不同的构造函数,不管它返回的是什么类型的实例。
  • constructor: Callable[..., T]:这里标注constructor是一个可调用对象(比如类本身,因为类的实例化过程就是调用类),...表示它可以接受任意数量、任意类型的参数,最终返回T类型的实例。
  • -> T:函数的返回类型标注为T,虽然manager.name()实际返回的是一个跨进程代理对象,但这个代理对象会完全转发原对象的方法和属性,在类型检查时可以当作原类型T来处理,这样代码的类型提示会更友好。

如果你的构造函数有明确的参数列表,还可以把Callable[..., T]改成更具体的形式,比如构造函数需要int和str类型的参数,返回MyClass实例,那可以写成Callable[[int, str], MyClass],不过Callable[..., T]是更通用的写法,适合大多数场景。

备注:内容来源于stack exchange,提问作者isa-2d

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:04:35