Re: [問題] decorator class in a class

看板Python作者 (poototo)時間1年前 (2022/11/19 01:45), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/5 (看更多)
再補充l大。原po的class A 小修如下,有兩個成員 class A(object): func = T1(lambda self: None) def func2(self): pass 成員 func 是屬性,也是 @T1 的等價結果,指向一個T1實例 成員 func2 是方法 b = A().func 指向該T1實例 b() 會調用 T1之成員 __call__,相當於 T1.__call__(b) 接著執行 return b.func() 相當於 return (lambda self:None)() 缺少self之錯誤便由此而來 想修飾的 func 並沒有成為 a=A() 的 bound method ※ 引述《lycantrope (阿寬)》之銘言: : ※ 引述《tsaiminghan (nahgnimiast)》之銘言: : : class T1(object): : : def __init__(self, func): : : self.func = func : : def __call__(self, *arg, **kw): : : print('T1:', locals()) : : return self.func(*arg, **kw) : : def T2(func): : : def wrapper(*arg, **kw): : : print(locals()) : : return func(*arg, **kw) : : return wrapper : 講錯還請高手指正 : @T1 : def F(): : pass : 把decorator還原: : def F(): : pass : F = T1(F) : F已經變成有implement call的 T1 class instance : 所以在呼叫F(),locals()會帶有self -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.15.82 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1668793551.A.041.html
文章代碼(AID): #1ZTyJF11 (Python)
討論串 (同標題文章)
文章代碼(AID): #1ZTyJF11 (Python)