def logging(func):#定义一个装饰器
def wrapper(*args,**kwargs):#装饰器的包装操作
print(func.__name__)#获取包装函数名称
return func(*args,**kwargs)
return wrapper
class Message:
@logging#不破坏原始的方法结构输出func.__name__
def msg(self):
print("Message")
通过装饰器接收参数需要再加一层包装。
def logging(fun="z"):
def wrapper(func):
def inner_wrapper(*args,**kwargs):
print(fun,func.__name__)
return inner_wrapper
return wrapper
class Message:
@logging(fun='zz')
def msg1(self):
print("Msg1")
@logging()
def msg2(self):
print("Msg2")
输出:
zzz msg1
Msg1
z msg2
Msg2
基于类定义装饰器
class Logging:
def __init__(self,fun='z'):
self.__fun = fun
def __call__(self,func):
def inner_wrapper(*args,**kwargs):
print(fun,func.__name__)
return inner_wrapper
return inner_wrapper