2016-03-08 5 views
0

Скажем, у меня есть существующий 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?

Благодарим вас за любые предложения!

+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) 

И так далее.

Если вы хотите исправить его в определенных случаях, а не в классе, это тоже выполнимо, хотя это немного больше.

 Смежные вопросы

  • Нет связанных вопросов^_^