#coding:utf-8 import sys,os,time,types,functools #装饰器,包裹被检测函数,并计数 def timerit(func): @functools.wraps(func) def wrapper(*args,**kw): start=time.time() value=func(*args,**kw) end=time.time() print("%suse time is %s"%(func.__name__,end-start)) return value return wrapper #元类,被计数的函数__metaclass__指向这个函数 class profiler(type): def __new__(cls,name,base,attr): print(‘__new__ is called‘) #遍历被计数类的属性,如果是FunctionType则用计数装饰器包裹它 for k,v in attr.items(): if isinstance(v,types.FunctionType): attr[k]=timerit(v) return type.__new__(cls,name,base,attr) class foo(metaclass=profiler): __metaclass__=profiler #这个地方有一个疑问, def countit(*args): sum=0 for i in range(10000): sum=sum+i print(sum) def main(): import time print(time.time()) print(hasattr(profiler,‘timeit‘)) f=foo() f.countit() print(dir(f)) print(f.__metaclass__) if __name__=="__main__": main()
几天前写的,参考了园友的一篇文章,链接找不到了。先感谢,找到了链接再补上。
时间: 2024-10-17 14:18:41