
























以下是一段通过metaclass实现Profiler的Python代码,很简单,功能不多,目的是为了展示Python的meta programming的能力,这种能力,无疑是很实用的,而且可以将AOP的方面(aspect)概念发挥的很好!下面的Profiler类(metaclass)就可以将方法的profiling在不同的类中复用。
class Profiler(type):
def __new__(mcl, name, bases, dict):
from time import clock
from types import FunctionTypedef timing(func):
def wrapper(*args, **kwds):
start = clock()
value = func(*args, **kwds)
end = clock()
print func.__name__, 'takes', (end - start), 'seconds'
return value
return wrapperfor attr, value in dict.iteritems():
if isinstance(value, FunctionType):
dict[attr] = timing(value)return super(Profiler, mcl).__new__(mcl, name, bases, dict)class A(object):
__metaclass__ = Profilerdef foo(self):
total = 0
for i in range(100000):
total = total+1
print totaldef foo2(self):
from time import sleep
total
= 0此篇为抛砖引玉,希望大家能制作出更多更强的metaclass来,然后不妨与我们分享!:)
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。