types.MethodType 与 functools.partial 之比较
这是我之前提问的延续(python 闭包 + 面向对象编程)。在那个问题的回答中,Winston Ewert 建议我使用 functools.partial
,而不是 types.MethodType
。
所以我现在的问题是:这两者有什么区别?为什么使用 functools 的方式被认为更好呢?
补充一下,我已经成功地用 functools.partial 实现了我的闭包,感觉真的很不错。:-)
1 个回答
4
从实际的角度来看,这两者之间并没有太大的区别。部分函数可以处理任意数量的参数(在这个例子中是1个);而实例方法会把当前对象(self)传递给被包装的函数;它们实际上是在做同样的事情!
不同之处在于,它们在某种程度上能够自我说明。在你提到的问题中,closure
可调用对象并不是任何东西的方法;它只是一个普通的函数,由 A
的一个方法返回。恰好这个函数的主体将 B
的一个实例作为第一个参数,但这并不足以让它成为 B
的“方法”。
所以这只是风格的问题。你做的事情看起来更像是 functools.partial
,所以你应该使用它,尽管你也可以用 types.MethodType
达到同样的效果。