【问题标题】:Dynamically monkey patch a python 2.7 class动态猴子补丁一个python 2.7类
【发布时间】:2016-03-08 20:11:08
【问题描述】:

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

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)

【问题讨论】:

  • 这种动态添加装饰器的方法是完全有效的。我也希望 Python 有更好的语法,但目前应该没问题。

标签: python python-decorators monkeypatching


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-04-15
    • 2012-12-18
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2016-09-01
    • 2012-09-16
    相关资源
    最近更新 更多