我想用python包装特定类的每个方法,并且我想通过最小限度地编辑类的代码来做到这一点。我该怎么做呢?
发布于 2015-02-11 22:13:22
如果大量修改默认类行为是必需的,那么MetaClasses就是最佳选择。这是另一种方法。
如果您的用例仅限于包装类的实例方法,则可以尝试覆盖__getattribute__
魔术方法。
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。
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
https://stackoverflow.com/questions/11349183
复制相似问题