Monkey 使用 class 中的原始方法修补 python 实例方法

Monkey patch a python instance method using the original method from the class

我想猴子修补一个库的方法 class 来为参数定义不同的默认值。这失败了:

from functools import partial

class A(object):
    def meth(self, foo=1):
        print(foo)

A.meth = partial(A.meth, foo=2)

a = A()
a.meth()

与:

Traceback (most recent call last):
  File "...", line 10, in <module>
    a.meth()
TypeError: meth() missing 1 required positional argument: 'self'

正确的做法是什么?

(原始代码在循环中的方法名称上使用 getattr

链接问题中的答案涉及定义新的模块级函数 - 我想避免定义新函数

使用partialmethod:

In [32]: from functools import partialmethod

In [33]: A.meth = partialmethod(A.meth, foo=2)

In [34]: a = A()

In [35]: a.meth()
2