用类写修饰器
在前面函数一章最后介绍的修饰器,一般都是使用函数来书写的。类也可以被用来书写修饰器,这主要依靠魔术方法来实现。
以下给出一个使用类来书写日志记录器的示例。
from functools import wraps
class Log(object):
def __init__(self, logfile="some_path"):
self.log_file = logfile
def __call__(self, func):
# __call__魔术方法负责进行被修饰函数的调用
@wraps(func)
def wrapped_func(*args, **kwargs):
self.write_log(*args, **kwargs)
return func(*args, **kwargs)
return wrapped_func
def write_log(self, *args, **kwargs):
pass
# 使用类的实例作为修饰器
@Log()
def some_operate():
pass
使用类书写的修饰器来做日志记录只是其最常见的功能实现,更多的使用场景,读者可以发挥想象力来应用。