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

如何在Python中使用类定义函数参数?

用类定义函数参数的实现方案

你给出的示例代码语法是无效的(def my_fun(FunArgs):里的FunArgs会被当作普通参数名,而非参数结构定义),下面是几种可行的实现方式,既能满足你追求的代码简洁性,又能清晰管理函数参数:

纯Python实现(无需第三方包)

方案1:使用dataclasses(Python 3.7+)

dataclasses是标准库自带的工具,可快速定义数据类,结合关键字参数传递,既能保证参数结构清晰,又能提供类型提示(配合IDE或静态检查工具)。

示例代码:

from dataclasses import dataclass

@dataclass
class FunArgs:
    first: int
    second: str

def my_fun(**kwargs):
    args = FunArgs(**kwargs)
    # 直接使用结构化后的参数
    print(args.first, args.second)

if __name__ == "__main__":
    my_fun(first=1, second="OK")  # 输出:1 OK

若想更严格约束参数传递,可让函数直接接受FunArgs实例,调用时显式初始化:

def my_fun(args: FunArgs):
    print(args.first, args.second)

my_fun(FunArgs(first=1, second="OK"))

方案2:使用TypedDict(Python 3.8+)

TypedDict用于定义字典的类型结构,适合仅需类型提示、不需要实例化对象的场景,静态检查工具(如mypy)会自动验证传入的关键字参数是否符合定义:

from typing import TypedDict

class FunArgs(TypedDict):
    first: int
    second: str

def my_fun(**kwargs: FunArgs):
    first = kwargs["first"]
    second = kwargs["second"]
    print(first, second)

my_fun(first=1, second="OK")

注意:TypedDict仅做静态类型提示,运行时不会自动验证参数类型和完整性,需自行添加检查逻辑。

第三方包实现(带强类型验证)

使用pydantic(主流数据验证库)

pydantic的BaseModel不仅能定义参数结构,还会在运行时自动验证参数类型、处理默认值、生成明确的错误提示,非常适合复杂业务场景。

首先安装依赖:

pip install pydantic

示例代码:

from pydantic import BaseModel

class FunArgs(BaseModel):
    first: int
    second: str

def my_fun(**kwargs):
    args = FunArgs(**kwargs)
    print(args.first, args.second)

my_fun(first=1, second="OK")

若传入不符合类型的参数(如first="1"),pydantic会直接抛出清晰的错误,避免后续逻辑出错。同样,也可以让函数直接接受FunArgs实例:

def my_fun(args: FunArgs):
    print(args.first, args.second)

my_fun(FunArgs(first=1, second="OK"))

内容的提问来源于stack exchange,提问作者Mat Watershed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:53:26