动态地对python 2.7类进行修补

动态地对python 2.7类进行修补,python,python-decorators,monkeypatching,Python,Python Decorators,Monkeypatching,想知道是否有人有一个很好的方法来动态地检查一个类的函数类型,然后动态地将一个装饰程序修补到其中一些函数上。我正在尝试,但没有得到我期望的结果。在课堂上遍历这些方法似乎是可行的,但猴子补丁本身似乎失败了。任何想法都非常感谢 def decorator(callable): pass class Test(object): def foo1(self): return self.bar() def foo2(self): return se

想知道是否有人有一个很好的方法来动态地检查一个类的函数类型,然后动态地将一个装饰程序修补到其中一些函数上。我正在尝试,但没有得到我期望的结果。在课堂上遍历这些方法似乎是可行的,但猴子补丁本身似乎失败了。任何想法都非常感谢

def decorator(callable):
    pass

class Test(object):
    def foo1(self):
        return self.bar()

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

    def foo3(self):
        return 0

for x,y in Test.__dict__.items():
        if type(y) == FunctionType:
            Test.x = decorator(Test.x)

当然,
Test.x
不存在,这将引发
AttributeError
。您可以为此使用
setattr
。同样
x.\uu dict\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

for x,y in vars(Test).items():
    if type(y) == FunctionType:
        setattr(Test, x, decorator(y))

当然,
Test.x
不存在,这将引发
AttributeError
。您可以为此使用
setattr
。同样
x.\uu dict\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

for x,y in vars(Test).items():
    if type(y) == FunctionType:
        setattr(Test, x, decorator(y))

这种动态添加装饰器的方法是完全有效的。我也希望Python提供更好的语法,但目前还可以,这种动态添加装饰器的方法是完全有效的。我还希望Python提供更好的语法,但目前还可以。