Python中如何实现链式调用?有哪些实现思路?

比如 A->B->C 每个函数执行结果要传递给下一个 如果中间有执行失败的 就终止掉


Python中如何实现链式调用?有哪些实现思路?
7 回复

你的意思是 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

回到顶部