首页 > 编程语言 > 详细

Python实现__metaclass__实现方法运行时间统计

时间:2015-04-18 01:06:31      阅读:350      评论:0      收藏:0      [点我收藏+]
技术分享
#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()
View Code


几天前写的,参考了园友的一篇文章,链接找不到了。先感谢,找到了链接再补上。

Python实现__metaclass__实现方法运行时间统计

原文:http://www.cnblogs.com/cncyber/p/4436357.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!