【发布时间】:2019-06-24 21:50:24
【问题描述】:
我想修改库类的方法来为参数定义不同的默认值。这失败了:
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)
链接问题中的答案涉及定义一个新的模块级函数 - 我想避免一个新的函数定义
【问题讨论】:
-
使用
@override? -
哦不熟悉
@override -
忽略我的覆盖语句,这可能是我的大脑混合了一些 Java 语法.. ouff.. 该声明可能只是令人眼花缭乱。对困惑感到抱歉。您应该能够直接替换
A.meth = new_func并且它应该可以工作。 -
@Mr_and_Mrs_D 注意
A.meth不是一个简单的函数,它是一个描述符。因此,您需要将其替换为实现描述符协议的对象。
标签: python python-3.x monkeypatching