想知道是否有人有一个很好的方法来动态检查一个类的函数类型,然后动态地将装饰器修补到其中一些函数上。我正在尝试这个,但没有得到我期望的结果。通过类中的方法似乎正在工作,但做猴子补丁本身似乎失败了。任何想法都非常感激!
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)
答案 0 :(得分:3)
当然Test.x
不存在,这会引发AttributeError
。您可以使用setattr
。 x.__dict__
对我来说也很难看,我会改用vars(x)
。
for x,y in vars(Test).items():
if type(y) == FunctionType:
setattr(Test, x, decorator(y))