我可以动态修改(猴子补丁)现有的python类方法来添加装饰器

时间:2016-03-08 17:26:01

标签: python monkeypatching

假设我有一个现有的python 2.7类:

class TestClass(object):
    def foo1(self):
        return self.foo2()

    def foo2(self):
        return self.foo3()

    def foo3(self):
        return 'Hello World!'

在运行时是否有办法动态地将(修补程序)装饰器(@testdecorator)添加到现有的三个方法foo1,foo2和foo3中?

提前感谢您的任何建议!

2 个答案:

答案 0 :(得分:2)

这听起来像是一件可怕的事情,但它完全有可能。 TestClass.foo1 = testdecorator(TestClass.foo1) 只是语法糖;你可以做很多事情:

mvn archetype:generate  -DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-quickstart-scala -DarchetypeVersion=0.8.1

答案 1 :(得分:1)

是:

TestClass.foo1 = testdecorator(TestClass.foo1)

等等。

如果你想在特定的实例而不是在课堂上修补它,那也是可行的,尽管它可以多做一些工作。