装饰器三个例子,装饰三个例子,import loggi
import loggingLOG_FILENAME = "Log_test.txt"LOG_FORMAT = '%(levelname)s: (%(asctime)s) %(message)s'logging.basicConfig(filename=LOG_FILENAME, level=logging.NOTSET, format=LOG_FORMAT)logger = logging.getLogger()# exampledef mydecorator(arg1, arg2): print "level 1 : Arg1=%s, arg2=%s" % (arg1, arg2) def newdec(func): print 'level 2 : newdec was called. the arg is func=%s' % func def replace(self, x, y): print "level 3 : replace was called. self is %s, x=%s, y=%s" % (str(self), str(x), str(y)) return func(self, x, y) return replace return newdec# logdef log_wrapper(func): def log_func_name(self, *args, **kws): logger.debug("function: %s", func.func_name) logger.debug("arg: %s, %s", [arg for arg in args], kws) result = func(self, *args, **kws) logger.debug("result:%s", result.__str__()) return result return log_func_name# cache & IOclass Memorized(object): def __init__(self, ttl = 300): self.ttl = ttl def __call__(self, func): def wrapper(obj, *args): cache = obj.__dict__.setdefault("cache", {}) now = time.time() key_name = self.func.func_name + str(args) try: value, timestamp = cache[key_name] if now - timestamp > self.ttl: raise KeyError except KeyError: value = self.func(obj, *args) cache[key_name] = (value, now) return value return wrapperclass A2: def __init__(self): pass @mydecorator('Hello', 'word.') @log_wrapper @Memorized(10) def method(self, x, y): print x, yif __name__ == '__main__': a = A2() a.method(1, 2)#该片段来自于http://byrx.net
评论关闭