python用类实现装饰器
一般实现python装饰器都是采用方法的模式,看起来有点复杂,模式如下:
def send_msg_simple(url): def decorator(func): def wrapper(*args, **kw): func(*args, **kw) group_robot(url, "完毕:%s.%s" % (kw['db'], kw['table'])) return wrapper return decorator
但其实也可以采用类的方式,看起来逻辑更为清晰:
class DecoratorTest(object): #定义一个类 def __init__(self,func): self.__func = func def __call__(self): #定义call方法,当直接调用类的时候,运行这里。 print('pre msg') self.__func() print('post msg') @DecoratorTest def test(): print('主函数体') if __name__=='__main__': test()
下面是cookbook上的类装饰器实现,略有不同
# 为了将装饰器定义成一个类,你需要确保它实现了 __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) # 你可以将它当做一个普通的装饰器来使用,在类里面或外面都可以: @Profiled def add(x, y): return x + y class Spam: @Profiled def bar(self, x): print(self, x)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗