Python Decorator
Python Decorator
Categories:
普通函数装饰器
函数接收一个 函数名 作为参数 内部定义一个函数, 接收参数, 然后 内部函数内部 执行接收的函数名 最后外部函数返回内部函数
def loger(fun):
def show(*args, **kwargs):
print("记录日志->执行前")
fun(*args, **kwargs)
print("记录日志->执行后")
return show
@loger
def xiaoming():
print("function is running......")
@loger
def jack():
print("function is running......")
xiaoming()
jack()
print("---" * 30)
可接收参数的普通函数装饰器
在不接受参数的装饰器基础上, 外面增加一层函数, 接收参数
def say_hello(contry):
def loger(fun):
def show(*args, **kwargs):
if contry == 'china':
print('中国')
elif contry == 'english':
print('English')
print("记录日志->执行前")
fun(*args, **kwargs)
print("记录日志->执行后")
return show
return loger
@say_hello('china')
def xiaoming():
print("function is running......")
@say_hello('english')
def jack():
print("function is running......")
xiaoming()
jack()
print("---" * 30)
普通类装饰器
init 接收被装饰的函数名 call 接收参数
class Loger(object):
def __init__(self, fun):
self.fun = fun
def __call__(self, *args, **kwargs):
print("before fun run")
self.fun(*args, **kwargs)
print("after fun run")
@Loger
def xiaoming():
print("function is running......")
@Loger
def jack():
print("function is running......")
xiaoming()
jack()
print("---" * 30)
可接收参数的类装饰器
init 接收参数 call 接收被装饰的函数名, 内部定义一个函数接收参数, 并执行外部接收的函数名
class SLoger(object):
def __init__(self, contry):
self.contry = contry
def __call__(self, fun):
def show(*args, **kwargs):
if self.contry == 'china':
print("中国")
elif self.contry == 'english':
print("English")
print("before fun run")
fun(*args, **kwargs)
print("after fun run")
return show
@SLoger('china')
def xiaoming():
print("function is running......")
@SLoger('english')
def jack():
print("function is running......")
xiaoming()
jack()
print("---" * 30)