types.MethodType 与 functools.partial

发布于 2024-12-09 00:23:41 字数 291 浏览 1 评论 0原文

这是我的另一个问题的延续(pythonclosure + oop)。在回答这个问题时,Winston Ewert 建议我使用 functools.partial 而不是 types.MethodType。

所以现在我的问题是:两者有什么区别?为什么认为 functool 方式更好?

附:我已经成功地使用 functools.partial 来完成我的关闭,它确实感觉很酷。 :-)

This is a continuation of my other question (python closure + oop). In the answer to that question, Winston Ewert suggested me to use functools.partial instead of types.MethodType.

So now my question is: what's the difference between the two? Why is the functool way considered better?

ps. I've managed to use functools.partial for my closure and it did feel cool. :-)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你是暖光i 2024-12-16 00:23:41

从实际的角度来看,没有太大区别。 Partial 会柯里化任意数量的参数(在本例中为 1);实例方法会将 self 实例(无论发生什么)传递给包装函数;他们在做同样的事情!

不同之处在于,他们在某种程度上记录了自己;在您链接的问题中;可调用的 closure 不是任何东西的方法;它是一个常规函数,由 A 的方法返回;碰巧主体将 B 的实例视为第一个参数;但这还不足以使其成为 B 的“方法”。

所以这只是风格问题。您正在做的事情看起来更像 functools.partial,因此您应该使用它,即使您可以使用 types.MethodType 实现相同的效果

From a practical stand point, there isn't a whole lot of difference. Partial will curry any number of arguments (in this case, 1); an instancemethod will pass the self instance (whatever that happens to be) to the wrapped function; They're doing the same thing!

The difference is that they somewhat document themselves; In your linked question; the closure callable isn't a method of anything; it's a regular function, returned by a method of A; It happens that the body sees an instance of B as the first argument; but that's not enough to make it a "method" of B.

So it's just a matter of style. You're doing something that looks more like functools.partial, and so you should use that, even though you can achieve the same effect with types.MethodType

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文