2016-03-08 30 views
0

比方說,我有一個現有的Python 2.7類:我可以動態修改(猴補丁)現有的Python類方法添加裝飾

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?

非常感謝您的任何建議!

+0

也有可能對您有用:http://stackoverflow.com/questions/6098073/creating-a-function-object-from-a-string – Torxed

回答

2

這聽起來像是一件可怕的事情,但這完全有可能。 @decorator只是句法糖;你可以做的很長的路要走:

TestClass.foo1 = testdecorator(TestClass.foo1) 
1

是:

TestClass.foo1 = testdecorator(TestClass.foo1) 

等。

如果你想修補它在特定的實例上而不是在類上,這也是可行的,儘管這是一個更多的工作。