动态猴子修补python 2.7类

时间:2016-03-08 20:11:08

标签: python python-decorators monkeypatching

想知道是否有人有一个很好的方法来动态检查一个类的函数类型,然后动态地将装饰器修补到其中一些函数上。我正在尝试这个,但没有得到我期望的结果。通过类中的方法似乎正在工作,但做猴子补丁本身似乎失败了。任何想法都非常感激!

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)

1 个答案:

答案 0 :(得分:3)

当然Test.x不存在,这会引发AttributeError。您可以使用setattrx.__dict__对我来说也很难看,我会改用vars(x)

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