首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何包装一个类的每个方法?

如何包装一个类的每个方法?
EN

Stack Overflow用户
提问于 2012-07-06 01:09:11
回答 1查看 20.2K关注 0票数 28

我想用python包装特定类的每个方法,并且我想通过最小限度地编辑类的代码来做到这一点。我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2015-02-11 22:13:22

如果大量修改默认类行为是必需的,那么MetaClasses就是最佳选择。这是另一种方法。

如果您的用例仅限于包装类的实例方法,则可以尝试覆盖__getattribute__魔术方法。

代码语言:javascript
复制
from functools import wraps
def wrapper(func):
    @wraps(func)
    def wrapped(*args, **kwargs):
        print "Inside Wrapper. calling method %s now..."%(func.__name__)
        return func(*args, **kwargs)
    return wrapped

确保在创建包装器时使用functools.wraps,如果包装器用于调试,则更是如此,因为它提供了合理的TraceBacks。

代码语言:javascript
复制
import types
class MyClass(object): # works only for new-style classes
    def method1(self):
        return "Inside method1"
    def __getattribute__(self, name):
        attr = super(MyClass, self).__getattribute__(name)
        if type(attr) == types.MethodType:
            attr = wrapper(attr)
        return attr
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11349183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档