装饰器,正如所描述的 就是为了给别的函数进行装饰(添加新的功能),其本来也是函数.
软件开发中的一个原则“开放-封闭”原则,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展.装饰器在这时候就派的上.
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