def traet(character_traet): # 把要执行的模块从这里传进来 def inner(*args, **kwargs): character_traet(*args, **kwargs) # 调用相应功能 return inner #用户调用treat时,只会返回inner的内存地址,下次再调用时加上()才会执行inner函数 @traet def nurse(nai): print("treatment form nurse %s" % nai) @traet def monk(): print("treatment from monk") def archer(): print("this is a archer that can not treat") monk() nurse("naiNai")# 这里相当于nurse = traet(nurse) nurse("naiNai") 你在这里相当于把 nurse这个函数替换了 # 结果:treatment from monk # treatment form nurse naiNai
装饰器,正如所描述的 就是为了给别的函数进行装饰(添加新的功能),其本来也是函数.
软件开发中的一个原则“开放-封闭”原则,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展.装饰器在这时候就派的上.