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

Python中如何处理带*前缀的函数参数?以Com类add方法为例

解决Com类add方法的参数访问与实现问题

首先注意你的方法定义里有个小笔误:参数comp: "Comp"里的Comp应该是Com,和你的类名保持一致。

接下来看add方法的参数:

  • comp: "Com":这是第一个传入的Com实例(比如调用时的c1)
  • *comps: "Com":这是可变参数,会把后续传入的所有Com实例打包成一个元组(比如调用时的c1, c2, Com(33.75, -14.25)会被打包成元组(c1, c2, Com(33.75, -14.25)))

要实现复数相加的逻辑,你需要把所有实例的a属性求和,b属性求和,然后返回一个新的Com实例。具体实现如下:

class Com:
    def __init__(self, a: float, b: float):
        self.a = a
        self.b = b

    def add(comp: "Com", *comps: "Com") -> "Com":
        # 初始化总和为第一个实例的a和b
        total_a = comp.a
        total_b = comp.b
        # 遍历可变参数里的所有Com实例,累加a和b
        for c in comps:
            total_a += c.a
            total_b += c.b
        # 返回新的Com实例
        return Com(total_a, total_b)

调用验证:

c1 = Com(5.0, 10.0)
c2 = Com(7.0, 100.0)
c_sum = Com.add(c1, c1, c2, Com(33.75, -14.25))
print(c_sum.a)  # 输出:50.75
print(c_sum.b)  # 输出:105.75

如果想让这个方法既可以通过类调用(Com.add(...))也可以通过实例调用(c1.add(c2, c3)),可以把第一个参数改成self,更符合Python方法惯例:

def add(self, *comps: "Com") -> "Com":
    total_a = self.a
    total_b = self.b
    for c in comps:
        total_a += c.a
        total_b += c.b
    return Com(total_a, total_b)

# 两种调用方式都可行
c_sum1 = c1.add(c1, c2, Com(33.75, -14.25))
c_sum2 = Com.add(c1, c1, c2, Com(33.75, -14.25))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:00:48