用类写修饰器

在前面函数一章最后介绍的修饰器,一般都是使用函数来书写的。类也可以被用来书写修饰器,这主要依靠魔术方法来实现。

以下给出一个使用类来书写日志记录器的示例。

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

使用类书写的修饰器来做日志记录只是其最常见的功能实现,更多的使用场景,读者可以发挥想象力来应用。