如何装饰一个属性来衡量它执行的时间?

How to decorate a property to measure the time it executes?

我试图编写一个装饰器来计算 class 中方法的计算时间,但我也有很多属性。 我尝试为 属性 编写装饰器,如下所示:

def timer(method):
    import time
    @property
    def wrapper(*args, **kw):
        start = time.time()
        result = method
        end = time.time()
        print('Elapsed time for: {} is: {}s'.format(method.__name__,(end-start)*1000))
        return result
    return wrapper

属性写的名字我看不出来,而且你会建议换个方式写吗?

您需要堆叠装饰器:

def timer(method):
    import time
    def wrapper(*args, **kwargs):
        start = time.time()
        result = method(*args, **kwargs)  # note the function call!
        end = time.time()
        print('Elapsed time for: {} is: {}s'.format(method.__name__,(end-start)*1000))
        return result
    return wrapper

class X:
    @property
    @timer
    def some_method(self):
        # timed code
        return 0

>>> x = X()
>>> x.some_method
Elapsed time for: some_method is: 0.0050067901611328125s
0