Re: [問題] decorator class in a class

作者: poototo (poototo)   2022-11-19 01:45:48
再補充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

Links booklink

Contact Us: admin [ a t ] ucptt.com