Python 如何创建按顺序调用的对象的自定义管道?

Python 如何创建按顺序调用的对象的自定义管道?,python,oop,scikit-learn,pipeline,Python,Oop,Scikit Learn,Pipeline,Scikit学习功能是一个带有最终估计器的变换管道 我如何创建一些可以与没有scikit learn fit&transform方法,但有______;调用__;()的类一起使用的东西?我不希望解决方案使用scikit学习管道。因此,我想按照下面列出的顺序执行以下操作 将dict传递给ppl,ppl将dict传递给a() 步骤1返回的输出df。传递给B()。\uuuuuuuu调用 步骤2返回的输出。传递给C()。uuuuuuuu调用 步骤3返回的输出。传递给lambda函数,该函数返回两列a和B

Scikit学习功能是一个带有最终估计器的变换管道

我如何创建一些可以与没有scikit learn fit&transform方法,但有______;调用__;()的类一起使用的东西?我不希望解决方案使用scikit学习管道。因此,我想按照下面列出的顺序执行以下操作

  • 将dict传递给ppl,ppl将dict传递给a()
  • 步骤1返回的输出df。传递给B()。\uuuuuuuu调用
  • 步骤2返回的输出。传递给C()。uuuuuuuu调用
  • 步骤3返回的输出。传递给lambda函数,该函数返回两列a和B的总和
  • 例如:

    import pandas as pd
    
    class A:
        def __init__(self, sample=1):
            self.sample = sample
    
        def __call__(self, dct):
            return pd.DataFrame(dct)[:self.sample]
    
    class B:
        def __init__(self, col1, col2):
            self.col1 = col1
            self.col2 = col2
        def __call__(self, df):
            return df[self.col1], df[self.col2]
    
    class C:
        def __call__(self, x, y):
            return x+y
    
    
    ppl = CustomPipeline(pipeline=[('A', A(sample=700)),
                                   ('B', B(col1='A', col2='B')),
                                   ('C', C())
                                   ('self', lambda x: x)])
    df_sum = ppl(dct={'A': [1, 2, 4], 'B': [10, 2, 3]})
    
    问题

    • 如何实现CustomPipeline(),使其能够根据上面列出的示例工作
    • 在每一个类中使用main()是否比在类中实现_____调用__()方法更好
    输入导入序列、元组、可调用、任意
    def CustomPipeline(管道:序列[Tuple[str,Callable[[Any],Any]])->Callable[[Any],Any]:
    def_运行(值:任意)->任意:
    对于名称,管道中的阶段:
    值=阶段(值)
    返回值
    返回运行
    >>>ppl=CustomPipeline([('a',λv:v*2),('b',λv:v+1)])
    >>>ppl(5)
    11
    
    外部函数用于创建管道各阶段的闭合


    这可以通过类轻松实现。

    很有趣。如果不是lambda v:v*2而是一个类呢?Any
    可调用[[Any],Any]
    应该可以工作,所以只要构造一个参数就可以了。如果你指的是一个类的实例(比如一个对象),那么它也是可以调用的(就像你的例子一样)。