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

如何在Python类__init__中按类型分组*args参数

实现按类型分离可变参数的类初始化方法

Python本身不支持在函数定义里同时声明两个*开头的可变参数(比如你想要的*legs, *vals),但可以通过统一接收*args后手动按类型分离的方式实现需求,以下是完整实现:

class Example:
    def __init__(self, *args, named_input: float, named_input_2: str):
        self.legs = []
        self.vals = []
        
        # 遍历所有位置可变参数,按类型分类
        for item in args:
            if isinstance(item, str):
                self.legs.append(item)
            elif isinstance(item, (int, float)):
                self.vals.append(item)
            else:
                raise TypeError(f"不支持的参数类型: {type(item)},仅接受字符串、整数或浮点数")
        
        # 强制验证至少传入一个leg
        if not self.legs:
            raise ValueError("必须至少传入一个leg参数(字符串类型)")

调用示例

按照你期望的方式调用,结果完全符合需求:

# 仅传入legs的情况
a = Example('1y', '5y', named_input=100, named_input_2='setting_1')
print(a.legs)  # 输出: ['1y', '5y']
print(a.vals)  # 输出: []

# 传入legs和单个val的情况
b = Example('1y', '5y', 15, named_input=100, named_input_2='setting_1')
print(b.legs)  # 输出: ['1y', '5y']
print(b.vals)  # 输出: [15]

# 传入单个leg和多个vals的情况
c = Example('1y', 0, 15, 30, named_input=100, named_input_2='setting_1')
print(c.legs)  # 输出: ['1y']
print(c.vals)  # 输出: [0, 15, 30]

关键逻辑说明

  1. 参数接收:用*args接收所有位置可变参数,规避Python语法不支持双可变参数的限制。
  2. 类型分离:遍历args,根据元素类型分别存入legs(字符串)和vals(整数/浮点数)列表,遇到非预期类型直接抛出错误提示。
  3. 合法性验证:检查legs列表是否为空,确保满足“至少传入1个leg”的硬性要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:25:49