Python中如何实现链式调用?有哪些实现思路?
比如 A->B->C 每个函数执行结果要传递给下一个 如果中间有执行失败的 就终止掉
Python中如何实现链式调用?有哪些实现思路?
你的意思是 C(B(A(X))),类似 F#的|>这种的?
在Python里实现链式调用,核心是让每个方法都返回对象自身(通常是self),这样就能在单行里连续调用多个方法。主要有两种思路:
1. 修改现有类的方法
这是最直接的方式。你只需要在每个想支持链式调用的方法末尾加上 return self。
class Calculator:
def __init__(self, value=0):
self.value = value
def add(self, x):
self.value += x
return self # 关键:返回自身实例
def subtract(self, x):
self.value -= x
return self
def multiply(self, x):
self.value *= x
return self
def get_result(self):
return self.value
# 链式调用
result = Calculator(5).add(10).subtract(3).multiply(2).get_result()
print(result) # 输出:24
2. 使用构建器模式(Builder Pattern)
这在创建复杂对象时特别有用。你创建一个专门的“构建器”类,它的每个设置方法都返回自己,最后用一个build()或get()方法生成最终对象。
class QueryBuilder:
def __init__(self):
self.query_parts = []
def select(self, columns):
self.query_parts.append(f"SELECT {columns}")
return self
def from_table(self, table):
self.query_parts.append(f"FROM {table}")
return self
def where(self, condition):
self.query_parts.append(f"WHERE {condition}")
return self
def build(self):
return " ".join(self.query_parts)
# 链式调用构建查询
query = QueryBuilder().select("*").from_table("users").where("age > 18").build()
print(query) # 输出:SELECT * FROM users WHERE age > 18
简单总结:想链式调用,方法末尾返回self就行。
不太明白你的需求是什么?因为这个太简单了。
import sys
def A(arg):
□□□□return value
def B(arg):
□□□□return value
def C(arg):
□□□□return value
try:
□□□□C(B(A()))
except:
□□□□sys.exit(1)
如果没什么特别要求的话:
( 1 )可以借助 RQ 这样的轻量级工具做守护进程,相当于搭个外部的桥。这样做的好处是 A、B、C 三个函数没有代码里的先后顺序要注意,以及轻量依赖;
( 2 )借助消息系统,三个函数也可以不注意顺序,但都需要监听消息?!
( 3 )不借助 RQ 和消息,倒着写成 C、B、A,执行是从 A 开始。
失败中断什么的,本身不就是有语法上的支持干这个?
楼主您看呢?
return self?
可以借鉴下 Maybe Monad

