Helper和Wrapper

在Python文档中经常会遇到术语:helperwrapper。有时它们修饰的是函数(function),有时是方法(method),有时是类(class)。虽然我们都可以粗略地理解为函数/方法/类,但它们到底指向的含义是什么呢?这里谈谈我的理解。

Helper

Helper函数或方法是将很多小任务集合起来,以便于未来会被多次调用的任务集合。这其实是我们最常见的函数类型。它使得程序变得简洁,减少了很多重复的代码。因此我们可以称之为帮手函数/方法/类。按照我们惯常对函数理解,甚至可以不显式说明,只称为函数即可。

示例:

  • Making a helper functions

    这里将一个绘图过程封装到了一个my_plotter函数中,在后面的代码被多次使用,实现了用不同数据绘制相同类型和风格图的意图。

Wrapper

Wrapper函数提供了一种为避免复杂过程而给用户提供简单界面的方式,或为调用不同函数而采用通用界面的方式。因此我们可以称之为包装函数/方法/类。

上面的说法有点绕,这里举两个栗子。

  1. 我们有一个从网页发送邮件的类。这个类有大量的选项,但其实这些选项在我们的应用并不需要被用到。这时就可以再写一个类,将原始类中我们不需要暴露的参数都隐藏起来。这种做法降低了代码的复杂性。

  2. 我们希望用一个通用的方式实现某种功能。比如我们有两个收取邮件的类,一个采用POP3协议,一个采用IMAP协议。我们希望要实现的APP能支持两种方式收取邮件,这时就可以写一个Wrapper类,使其具有两种协议。只需通过设置参数即可决定这个Wrapper类具体遵从哪种协议。更重要的是,当将来有了其它协议的需求时,APP本身并不需要修改,只需要升级一下这个Wrapper类即可。

总结

  • HelperWrapper并不是非此即彼的两个类型,而是从不同的角度对函数/方法/类的意义做了描述。
  • 它们的共同特点是将代码变量简洁易用。
  • 它们的不同点是各有侧重:
    • 当我们强调某个函数/方法/类是Helper时,是在说明它封装了一个将会被经常调用的一组任务。
    • 当我们强调某个函数/方法/类是Wrapper时,是在说明它封装了复杂性、多样性。

参考