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
相关产品推荐
相关产品推荐

