在Python中应用链接方法调用

在Python中应用链接方法调用,python,python-2.7,design-patterns,Python,Python 2.7,Design Patterns,我将创建一个python类“ExcelFile”来处理在工作簿中添加多个工作表的问题 该函数应该是通用的,这样团队中的任何人都可以轻松地使用它 我做了开发,一切都很好,我的代码如下: def addSheet(df,"sheet_name1"): -- reading template -- add sheet1 -- replace existing file 在我多次调用该函数后,这取决于我要添加多少工作表,因此: addSheet(df1,"sheet_name1

我将创建一个python类“ExcelFile”来处理在工作簿中添加多个工作表的问题

该函数应该是通用的,这样团队中的任何人都可以轻松地使用它

我做了开发,一切都很好,我的代码如下:

def addSheet(df,"sheet_name1"):
    -- reading template
    -- add sheet1
    -- replace existing file
在我多次调用该函数后,这取决于我要添加多少工作表,因此:

addSheet(df1,"sheet_name1")
addSheet(df2,"sheet_name2")
addSheet(df3,"sheet_name3")
我想重构代码并将其放入python类中,实现一个设计模式,通过调用

xls_file = ExcelFile().useTemplate("template_path").addSheet(df,"sheet_name1").addSheet(df2,"sheet_name2").writeXlsFile("filename")
这样做的设计模式的名称是什么

所以在搜索之后: 我用链式方法

作为pd进口熊猫 导入openpyxl

class ExcelFile(object):
    template_path = None
    file_path = None
    book = None
    xlwriter = None

    def replaceSheet(self, dataframe, sheet_name):
        pandas_df = dataframe.toPandas()
        self.book = openpyxl.load_workbook(self.template_path)
        self.xlwriter = pd.ExcelWriter(self.template_path, engine='openpyxl')
        # test if the sheet doesn't exist
        sheet_id = self.book.get_sheet_by_name(sheet_name)
        self.book.remove(sheet_id)
        self.xlwriter.book = self.book
        pandas_df.to_excel(self.xlwriter, sheet_name=sheet_name, index=False, header=True)
        return self

    def useTemplate(self, template_path):
        self.template_path = template_path
        return self

    def writeFile(self, file_path):
        self.book.save(file_path)
        self.xlwriter.save()
        self.xlwriter.close()
        return file_path
Anf不是多次调用函数,而是通过以下方式调用:

xls_file = ExcelFile()
xls_file.useTemplate(template_path=templatepath) \
    .replaceSheet(dataframe=Sales_df, sheet_name="DB Sales") \
    .replaceSheet(dataframe=cost_df, sheet_name="DB COST") \
    .replaceSheet(dataframe=b2c_df, sheet_name="DB B2C") \
    .writeFile(file_path=local_tmp_file)

你可以称之为fluid/fluent API——你可以使用谷歌来研究它。所以它不是一个协同编程的平台,试着解决它,如果你有具体的问题就回来。@PatrickArtner,谢谢你的回答,我把解决方案放在搜索之后,这在Python中并不是一个真正常见的API设计。@chepner,我首先认为这是一种类似于builder或factory的设计模式,现在,我明白了,但设计模式并不是通用的。有些是为了弥补某一特定语言的不足而存在的,尽管这里的情况并非如此。好的,构建器模式的要点是,您可以通过多个函数调用对部分构建的对象执行线程。这不仅仅是为了让您能够将原本可能是一组独立的变异方法调用组合到一个巨大的表达式中。(理想情况下,构建器也不会改变任何内部状态,而是在每一步创建一个新的、增强的构建器。)