Python 类方法链接

Nul*_*yte 5 python oop chaining

我确实有一堂课:

class BaseModel:

    def __init__(self):
        pass

    def read_data(self):
        df = ...
        return df

    def transform_input(self, df):
        df = ...
        return df

    def execute(self, df):
        df = ...
        return df

    def run(self):
        data = self.read_data()
        data = self.transform_input(data)
        data = self.execute(data)
Run Code Online (Sandbox Code Playgroud)

如何避免这些方法相继调用?是否可以这样做:

data = self.read_data().transform_input().execute()
Run Code Online (Sandbox Code Playgroud)

是否可以以某种方式链接这些方法并解决在此方法链中传递参数(数据)的问题?

Ama*_*dan 5

这些不是类方法,它们是实例方法。对于方法链,每个方法都必须返回一个实现链中下一个方法的对象。由于所有方法都是 的实例方法BaseModel,因此您需要返回 的实例BaseModel(或其后代)。这显然意味着您无法返回df(因为大概df不是 的对象BaseClass)。将其存储在实例中并在链的末尾检索它。

class BaseModel:

    def __init__(self):
        pass

    def read_data(self):
        self.df = ...
        return self

    def transform_input(self):
        self.df = ...
        return self

    def execute(self):
        self.df = ...
        return self

    def run(self):
        data = self.read_data().transform_input().execute().df
Run Code Online (Sandbox Code Playgroud)

对于实例方法和类方法之间的区别,这个答案给出了一个很好的概述。