装饰器三个例子,装饰三个例子,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

评论关闭