針對函數和類單獨寫裝飾器可以理解了,請參考往期文件。
之前寫了一個類,然後想把裝飾器實現的函數也寫在類裏面,在類方法加上裝飾器,之前一直報錯。
現在解決了,就是類裏面的參數第一個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。
請忽略以上神經病劇情,透過現象看本質。