文件名称:将装饰器定义为类-python cookbook(第3版)高清中文完整版
文件大小:4.84MB
文件格式:PDF
更新时间:2024-06-29 23:06:28
python cookbook 第3版 高清 中文完整版
9.9 将装饰器定义为类 问题 你想使用一个装饰器去包装函数,但是希望返回一个可调用的实例。 你需要让你的装饰 器可以同时工作在类定义的内部和外部。 解决方案 为了将装饰器定义成一个实例,你需要确保它实现了 __call__() 和 __get__() 方法。 例 如,下面的代码定义了一个类,它在其他函数上放置一个简单的记录层: import types from functools import wraps class Profiled: def __init__(self, func): wraps(func)(self) self.ncalls = 0 def __call__(self, *args, **kwargs): self.ncalls += 1 return self.__wrapped__(*args, **kwargs) def __get__(self, instance, cls): if instance is None: return self else: return types.MethodType(self, instance) 你可以将它当做一个普通的装饰器来使用,在类里面或外面都可以: