码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-04-18 01:08:22      阅读:322      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!