我可以动态修改(猴子补丁)现有的 python class 方法来添加装饰器吗
Can I dynamically modify (monkey patch) an existing python class method to add a decorator
假设我有一个现有的 python 2.7 class:
class TestClass(object):
def foo1(self):
return self.foo2()
def foo2(self):
return self.foo3()
def foo3(self):
return 'Hello World!'
有没有办法在运行时为 foo1、foo2 和 foo3 这三个现有方法中的每一个动态添加(猴子补丁)装饰器 (@testdecorator)?
提前感谢您的任何建议!
这听起来很可怕,但完全有可能。 @decorator
只是语法糖;你可以做很长的路要走:
TestClass.foo1 = testdecorator(TestClass.foo1)
是:
TestClass.foo1 = testdecorator(TestClass.foo1)
以此类推
如果您想在特定实例上而不是在 class 上对其进行修补,那也是可行的,尽管需要更多的工作。
假设我有一个现有的 python 2.7 class:
class TestClass(object):
def foo1(self):
return self.foo2()
def foo2(self):
return self.foo3()
def foo3(self):
return 'Hello World!'
有没有办法在运行时为 foo1、foo2 和 foo3 这三个现有方法中的每一个动态添加(猴子补丁)装饰器 (@testdecorator)?
提前感谢您的任何建议!
这听起来很可怕,但完全有可能。 @decorator
只是语法糖;你可以做很长的路要走:
TestClass.foo1 = testdecorator(TestClass.foo1)
是:
TestClass.foo1 = testdecorator(TestClass.foo1)
以此类推
如果您想在特定实例上而不是在 class 上对其进行修补,那也是可行的,尽管需要更多的工作。