如何初始化链式传入的多个类参数并计算它们的总和?
实现链式调用的求和类
要实现你需要的链式传参求和效果,核心是让类的实例支持可调用(即能像函数一样被调用),同时维护一个累加的总和。以下是具体实现:
class Chain: def __init__(self, initial): # 初始化总和为第一个传入的参数 self.total = initial def __call__(self, value): # 每次调用时累加新参数,返回self以支持链式调用 self.total += value return self def __repr__(self): # 控制交互式环境下的显示格式:整数显示为整数,否则显示浮点数 if self.total.is_integer(): return str(int(self.total)) return str(self.total) def __float__(self): # 支持隐式转换为浮点数,方便参与数值运算 return self.total def __int__(self): # 支持隐式转换为整数 return int(self.total)
测试效果
>>> Chain(2.5)(2)(2)(2.5) 9 >>> Chain(3)(1.5)(2)(3) 9.5
关键原理说明
__init__:接收第一个参数,初始化累加总和。__call__:Python中,只要类实现了这个方法,其实例就可以被当作函数调用。每次调用时把新参数加到总和,然后返回self,这样就能继续链式调用下一个参数。__repr__:自定义实例在交互式命令行中的输出格式,让整数结果显示为整数,浮点数结果正常显示,完全匹配你要的效果。__float__/__int__:让实例可以直接作为数值参与运算,比如Chain(2)(3) + 5会返回10。
内容的提问来源于stack exchange,提问作者Harez
相关产品推荐
相关产品推荐

