动态猴子补丁 a python 2.7 class

Dynamically monkey patch a python 2.7 class

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

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。您可以为此使用 setattrx.__dict__ 对我来说也很难看,我会用 vars(x) 代替。

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