Python中如何实现带方法链的延迟计算?
实现Python中的惰性链式调用
当然可以实现这种惰性链式调用的逻辑!核心思路是把操作指令先“记录”下来,而不是立刻执行计算,等到调用compute()的时候再统一处理所有排队的操作。下面我一步步给你讲清楚实现方式:
实现思路
- 给
MATH类新增一个列表,用来存储待执行的操作(比如是加法还是减法,以及对应的参数) - 让
add、minus这些操作方法返回当前实例(self),这样就能实现链式调用 compute()方法负责遍历所有待执行的操作,批量修改results列表
完整代码实现
class MATH(object): def __init__(self): self.results = [0, 1, 2] # 用来存储待执行的操作队列,每个元素是(操作类型, 参数)的元组 self.operations = [] def add(self, value): # 记录加法操作,不立即执行 self.operations.append(('add', value)) # 返回自身实例,支持链式调用 return self def minus(self, value): # 记录减法操作 self.operations.append(('minus', value)) return self def compute(self): # 遍历操作队列,依次执行所有计算 for op_type, value in self.operations: if op_type == 'add': self.results = [num + value for num in self.results] elif op_type == 'minus': self.results = [num - value for num in self.results] # 执行完毕后清空操作队列,避免重复执行(可选,根据需求调整) self.operations = [] # 返回结果方便后续使用 return self.results
测试调用逻辑
你可以按照预期的方式调用,完全符合你的需求:
m = MATH() # 链式调用阶段:只是记录操作,不会修改results m.add(5).minus(2).add(7) # 此时查看results还是初始值 print(m.results) # 输出: [0, 1, 2] # 调用compute才会批量执行所有操作 final_result = m.compute() print(final_result) # 输出: [10, 11, 12]
关键细节说明
- 链式调用的实现:每个操作方法最后返回
self,这样每次调用方法后得到的还是同一个MATH实例,自然就能接着调用下一个方法。 - 惰性执行的核心:我们没有在
add/minus里直接修改results,而是把操作指令存在队列里,相当于把计算任务“攒起来”,直到compute被调用才一次性处理。 - 扩展性:如果后续要新增乘法、除法等操作,只需要新增对应的方法,往
operations队列里添加新的操作类型即可,非常灵活。
内容的提问来源于stack exchange,提问作者slaw
相关产品推荐
相关产品推荐

