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

如何为基于Dataclass的自定义函数添加类型提示与自动补全

为自定义函数添加与Dataclass一致的类型提示

我定义了一个Dataclass类Model,还有一个自定义函数my_func,该函数会利用传入的所有kwargs参数创建Model的实例。直接创建Model实例时,我能看到__init__方法的类型提示与自动补全功能,现需为my_func添加相同的类型提示,使其提示需传入attr1和attr2参数。

代码示例:

from dataclasses import dataclass

@dataclass
class Model:
    attr1: str
    attr2: int

def my_func(**kwargs):
    model = Model(**kwargs)

    ...  # 其他操作
    ret = [model]

    return ret

# 希望my_func能提示需要传入'attr1'和'attr2'
my_func(attr1='hello', attr2=65535)

方法1:Python 3.11+ 推荐写法(动态复用Dataclass参数)

利用typing模块的Unpack和Parameters,可以直接复用Model.__init__的参数类型,无需手动重复定义:

from dataclasses import dataclass
from typing import Unpack, Parameters

@dataclass
class Model:
    attr1: str
    attr2: int

# 提取Model构造方法的参数类型
ModelInitParams = Parameters[Model.__init__]

def my_func(**kwargs: Unpack[ModelInitParams]) -> list[Model]:
    model = Model(**kwargs)
    # 其他操作
    ret = [model]
    return ret

这样编辑器会自动识别my_func需要传入attr1(字符串类型)和attr2(整数类型),和直接创建Model实例时的提示完全一致,后续如果Model的参数有修改,这里的类型提示会自动同步。

方法2:兼容旧版本Python(使用typing_extensions)

如果你的Python版本低于3.11,先安装依赖库:

pip install typing-extensions

然后用TypedDict定义参数结构,再通过Unpack实现类型提示:

from dataclasses import dataclass
from typing_extensions import Unpack, TypedDict

@dataclass
class Model:
    attr1: str
    attr2: int

# 定义与Model参数匹配的TypedDict
class ModelParams(TypedDict):
    attr1: str
    attr2: int

def my_func(**kwargs: Unpack[ModelParams]) -> list[Model]:
    model = Model(**kwargs)
    # 其他操作
    ret = [model]
    return ret

方法3:显式声明参数(简单直观)

如果Model的参数不会频繁变动,直接在my_func中显式声明参数是最直接的方式:

from dataclasses import dataclass

@dataclass
class Model:
    attr1: str
    attr2: int

def my_func(attr1: str, attr2: int) -> list[Model]:
    model = Model(attr1=attr1, attr2=attr2)
    # 其他操作
    ret = [model]
    return ret

这种写法无需依赖额外类型工具,编辑器的提示效果也完全符合需求,缺点是Model参数修改时需要同步更新my_func的参数列表。

内容的提问来源于stack exchange,提问作者Lost Traveller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:50:36