Discuss / Python / log装饰器作业

log装饰器作业

Topic source

滴滴嗒1111

#1 Created at ... [Delete] [Delete and Lock User]
def log(param):
    # 这是真正的装饰器,根据条件提供fn
    def pre_decorator(fn, text=None):
        @functools.wraps(fn)
        def wrapper(*args, **kw):
            print('func:%s log start...' % fn.__name__)

            # 如果text不为空,则打印text            if text is not None:
                print("param: %s" % param)

            res = fn(*args, **kw)
            print('func:%s log end...' % fn.__name__)
            return res
        return wrapper

  # 如果param是可调用对象,直接返回装饰器    
  if param is isinstance(param, (FunctionType, MethodType)) or hasattr(param, '__call__'):
        return pre_decorator(param)

   def decorator(func):
       return pre_decorator(func, param)

   return decorator


@log
def test_log_1():
    print('装饰器无参数测试.')


@log("qaaasd阿山东山东的山东撒到山东山东的撒到")
def test_log_2():
    print('装饰器有参数测试.')


test_log_1()
print('---------------------------------------')
test_log_2()


# 输出
func:test_log_1 log start...
装饰器无参数测试.
func:test_log_1 log end...
---------------------------------------
func:test_log_2 log start...
param: qaaasd阿山东山东的山东撒到山东山东的撒到
装饰器有参数测试.
func:test_log_2 log end...

  • 1

Reply