如何将Python函数的多可选参数转换为类传入?
用类封装多可选参数的实现方案
1. 定义参数类(推荐用dataclasses)
Python的dataclasses模块可以快速生成用于存储数据的类,自动帮你处理初始化、属性赋值等逻辑,刚好适配你的场景:
from dataclasses import dataclass from typing import Optional @dataclass class FunctionParams: arg1: Optional[int] = 0 arg2: Optional[int] = 0 arg3: Optional[int] = 0 arg4: Optional[int] = 0 arg5: Optional[int] = 0 arg6: Optional[str] = None arg7: Optional[str] = None arg8: Optional[str] = None arg9: Optional[str] = None arg10: Optional[str] = None
2. 修改原函数接收类实例
把原来的多参数函数改成只接收这个类的实例,内部通过实例属性访问参数:
def function(params: FunctionParams): # 示例:访问参数 print(params.arg1, params.arg6) # 原函数逻辑... pass
3. 调用方式(仅传相关参数)
创建FunctionParams实例时,只需要传入你当前需要的参数,剩下的会自动使用默认值:
# 示例1:只传arg3和arg7 params1 = FunctionParams(arg3=5, arg7="test") function(params1) # 示例2:传多个参数 params2 = FunctionParams(arg1=10, arg5=20, arg10="finish") function(params2)
备选方案:手动写普通类
如果不想用dataclasses,也可以自己实现类的初始化方法,效果一致:
from typing import Optional class FunctionParams: def __init__(self, arg1: Optional[int] = 0, arg2: Optional[int] = 0, arg3: Optional[int] = 0, arg4: Optional[int] = 0, arg5: Optional[int] = 0, arg6: Optional[str] = None, arg7: Optional[str] = None, arg8: Optional[str] = None, arg9: Optional[str] = None, arg10: Optional[str] = None): self.arg1 = arg1 self.arg2 = arg2 self.arg3 = arg3 self.arg4 = arg4 self.arg5 = arg5 self.arg6 = arg6 self.arg7 = arg7 self.arg8 = arg8 self.arg9 = arg9 self.arg10 = arg10
内容的提问来源于stack exchange,提问作者Ussu20
相关产品推荐
相关产品推荐

