什么是装饰器
装饰器本质上是一个函数,可以对原有的函数进行功能增加,而不破坏原有的函数,即不侵入原有的函数。
装饰器的写法
1、未使用装饰器的写法
def add(x
, y
):
print("===Call add function===")
return x
+ y
def process(fn
):
def _call(*args
, **kwargs
):
print("+++Call wrapper function+++")
return fn
(*args
, **kwargs
)
return _call
add
= process
(add
)
print(add
(1, 2))
2、使用装饰器
(1) 无参装饰器
def process(fn
):
def wrapper(*args
, **kwargs
):
print("+++Call wrapper function+++")
return fn
(*args
, **kwargs
)
return wrapper
@process
def add(x
, y
):
print("===Call add function===")
return x
+ y
print(add
(1, 2))
装饰器函数接收的必须是一个函数对象,返回的也必须是一个函数对象。
(2) 带参装饰器
def process(num
):
def decorator(fn
):
def wrapper(*args
, **kwargs
):
if num
>= 5:
return fn
(*args
, **kwargs
) + num
return fn
(*args
, **kwargs
)
return wrapper
return decorator
@process
(6)
def add(x
, y
, z
=3):
return x
+ y
+ z
print(add
(1, 2, 3))
(3) 类装饰器
i、无参的使用情况
class Process(object):
def __init__(self
, func
):
self
.func
= func
def __call__(self
, *args
, **kwargs
):
return self
.func
(*args
, **kwrags
)
@Process
def add(x
, y
):
return x
+ y
print(add
(1, 2))
ii、带参数的情况
class Decorator(object):
def __init__(self
, num
):
self
.num
= num
def __call__(self
, fn
):
def wrapper(*args
, **kwargs
)
if self
.num
>= 5:
return fn
(*args
, **kwargs
) + self
.num
return fn
(*args
, **kwargs
)
return wrapper
@Decorator
(5)
def add(x
, y
):
return x
+ y
=======未完待续=
转载请注明原文地址:https://ipadbbs.8miu.com/read-179.html