我有一个名为Operators的类,这个类有一个函数池。我想测试每个函数的执行时间。所以代码如下所示。
Class Operators(object):
def A(self):
"""do something"""
def B(self):
"""do something"""
Class EvaluateWrap(object):
def __init__(self):
self.op = Operator()
def Evaluate(self):
def _Decorator(f):
functool.wrap(f)
def Wrap(*args, **kwargs):
# time_start
f(*args, **kwargs)
# time end, elapsed
return Wrap
return _Decorator
def Run(self):
@self.Evaluate()
op.A()
@self.Evaluate()
op.B()
首先,使用self.Evaluate不起作用,除了我发现装饰器只用于类和函数,所以我该怎么办?非常感谢。
答案 0 :(得分:0)
如果你想在一个(或多个)成员方法中使用类中的装饰器,我不认为这是合理的。因为class
是一个整洁的容器。
在一个函数上使用decorator,然后可以用于模块级方法或类方法。
例如,@timeit decorator允许您通过在方法调用前添加@timeit装饰器来测量专用方法的执行时间。
import time
def timeit(method):
def timed(*args, **kw):
ts = time.time()
result = method(*args, **kw)
te = time.time()
print '%r (%r, %r) %2.2f sec' % \
(method.__name__, args, kw, te-ts)
return result
return timed
class Foo(object):
@timeit
def foo(self, a=2, b=3):
time.sleep(0.2)
@timeit
def f1():
time.sleep(1)
print 'f1'
f1()
Foo().foo()
output:
f1
'f1' ((), {}) 1.01 sec
'foo' ((<__main__.Foo object at 0x103b849d0>,), {}) 0.20 sec