针对函数和类单独写装饰器可以理解了,请参考往期文档。
之前写了一个类,然后想把装饰器实现的函数也写在类里面,在类方法加上装饰器,之前一直报错。
现在解决了,就是类里面的参数第一个self,所以一定要注意self参数。
实现例子如下:
class action:
def __init__(self,name,gender,address=None):
self.name=name
self.gender=gender
self.address=address
print("你好啊!!")
#装饰器
def warpper( func ):
def warpper_0(*args,**kwargs):
print("开始,名字")
instance=args[0]
print(instance.name)
print("居住地:")
print(instance.address)
func(*args,**kwargs)
print("卡")
return warpper_0
@warpper
def function( self,name="魏无羡",gender="男",address="夷陵"):
if self.name=="温宁":
print("鬼将军温宁是魏无羡的小跟班")
if self.address==None:
print("住在这里吧:"+address)
else:
print("有住的地方啊!"+self.address+" 是个好地方!")
print("我是"+name+",我住"+address)
elif self.name=="江澄":
print("江澄是个二愣子,哈哈哈!")
if self.address==None:
print("莲花坞不能住了吗?")
else:
print("现在住在这里了啊"+self.address)
print ( "我是" + name )
else:
print(self.gender)
if self.gender=="女":
print("你貌似走错片场了")
else:
print("搞事业搞事业,没空谈恋爱")
print ( "我住" + address )
print("给你演奏一曲乱魄抄,夺舍咋样")
print("哈哈哈哈,乱七八糟,请忽略")
#装饰器
ac=action("江澄",gender="男",address="无家可归")
print("+++++++++++++++++++++++++++++++++++++++++++++")
ac.function()
print("==============================================")
ac1=action("江厌离",gender="女",address="无家可归")
print("================================================")
ac1.function("蓝湛",address="云深不知处")
运行结果如下:
C:\Users\18566\AppData\Local\Programs\Python\Python38\python.exe C:/Users/18566/Desktop/APPAutoTest/zhuangshiqi.py
你好啊!!
+++++++++++++++++++++++++++++++++++++++++++++
开始,名字
江澄
居住地:
无家可归
江澄是个二愣子,哈哈哈!
现在住在这里了啊无家可归
我是魏无羡
卡
==============================================
你好啊!!
================================================
开始,名字
江厌离
居住地:
无家可归
女
你貌似走错片场了
我住云深不知处
给你演奏一曲乱魄抄,夺舍咋样
哈哈哈哈,乱七八糟,请忽略
卡
Process finished with exit code 0
关键点就是要把args[0]赋给一个值,这个args[0]代表self。
请忽略以上神经病剧情,透过现象看本质。