文章目录
1.常规做法
def decorator(func):
def __logdec(self, *args, **kwargs):
print('【Start--------%s】' % func.__name__)
print("\n")
func(self, *args, **kwargs)
print("\n")
print('【End--------%s】' % func.__name__)
print("\n")
print("\n")
return __logdec
class AlienClass(object):
@decorator
def print_info(self, info):
print("--------->{}".format(info))
@decorator
def print_name(self, name):
print("===============>>{}".format(name))
@decorator
def xxxxxxxx():
# 此处省略N个函数............
pass
alien = AlienClass()
alien.print_info("hello world !")
alien.print_name("alien")
# 最终效果如下:
【Start--------print_info】
--------->hello world !
【End--------print_info】
【Start--------print_name】
===============>>alien
【End--------print_name】
2.优雅的姿势
import inspect, types
def decorator(func):
def __logdec(self, *args, **kwargs):
print('【Start--------%s】' % func.__name__)
print("\n")
func(self, *args, **kwargs)
print("\n")
print('【End--------%s】' % func.__name__)
print("\n")
print("\n")
return __logdec
class AlienClass(object):
def print_info(self, info):
print("--------->{}".format(info))
def print_name(self, name):
print("===============>>{}".format(name))
for name, fn in inspect.getmembers(AlienClass):
if isinstance(fn, types.FunctionType):
setattr(AlienClass, name, decorator(fn))
alien = AlienClass()
alien.print_info("hello world !")
alien.print_name("alien")
3.python2注意点
# 如下地方需要替换
for name, fn in inspect.getmembers(AlienClass):
if isinstance(fn, types.UnboundMethodType):
setattr(AlienClass, name, decorator(fn))