假设我有一个类Foo
。我写了一个decoratordeco
我想应用到类的一些方法上。因为Foo
是从库中导入的,所以我决定将其子类化为Foo
。现在,我只需要将decorator添加到Bar
的一些方法中。
class Bar(Foo):
@deco
def aMethod(self, *args, **kwargs):
super().aMethod(*args, **kwargs)
既然我不需要修改
Foo
的代码,有没有一种更简单的方法来修饰它,而不需要显式地调用aMethod
? 最佳答案
您可以通过将方法替换为修饰版本来monkeypatchFoo
:
Foo.aMethod = deco(Foo.aMethod)
Decorator语法只是语法糖,毕竟,
deco
只是一个可调用的函数,其结果将替换decorated函数:@deco
def aMethod(...):
....
有效翻译为:
def aMethod(....):
...
aMethod = deco(aMethod)
或者,如果您仍希望使用子类,请在类的主体中执行相同的操作:
class Bar(Foo):
aMethod = deco(Foo.aMethod)
在Python2中,需要先打开函数:
Foo.aMethod = deco(Foo.aMethod.im_func)
关于python - 装饰子类方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16800335/