在Python中调用拦截方法
我正在Python中实现一个REST风格的Web服务,并希望通过拦截函数调用并logging它们的执行时间等来添加一些QOS日志loggingfunction。
基本上我想到了一个其他所有服务都可以inheritance的类,它自动覆盖默认的方法实现,并将它们包装在一个logging器函数中。 什么是达到这个目的的最好方法?
像这样的东西? 这隐含地增加了一个装饰器到你的方法(如果你喜欢的话,你也可以根据这个做一个明确的装饰器):
class Foo(object): def __getattribute__(self,name): attr = object.__getattribute__(self, name) if hasattr(attr, '__call__'): def newfunc(*args, **kwargs): print('before calling %s' %attr.__name__) result = attr(*args, **kwargs) print('done calling %s' %attr.__name__) return result return newfunc else: return attr
当你现在尝试像这样的东西:
class Bar(Foo): def myFunc(self, data): print("myFunc: %s"% data) bar = Bar() bar.myFunc(5)
你会得到:
before calling myFunc myFunc: 5 done calling myFunc
如果你在每个函数上写一个装饰器呢? 这里是一个Python的wiki的例子。
你使用任何Web框架来做你的web服务? 还是你手里做的一切?