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)
?
是否可以以某种方式链接这些方法并解决在此方法链中传递参数(数据)的问题?
这些不是类方法,它们是实例方法。对于方法链,每个方法都必须返回一个实现链中下一个方法的对象。由于所有方法都是 的实例方法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)
对于实例方法和类方法之间的区别,这个答案给出了一个很好的概述。