Re: [問題] decorator class in a class
再補充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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 5 篇):