Re: [問題] decorator class in a class

看板Python作者 (nahgnimiast)時間1年前 (2022/11/21 11:26), 1年前編輯推噓4(402)
留言6則, 2人參與, 1年前最新討論串5/5 (看更多)
後來發現缺少的self,可以透過Descriptor把它加回來 =========================== class T1(object): def __init__(self, func): self.func = func def __get__(self, obj, cls=None): self.obj = obj return self def __call__(self, *arg, **kw): return self.func(self.obj, *arg, **kw) class A(object): x = 2 @T1 def func(self): print(self.x) a = A() a.func() ============================== -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.166.65 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1669001199.A.B0A.html

11/21 16:32, 1年前 , 1F
在執行上,會有怎樣的差別?
11/21 16:32, 1F
上面的code的話,用起來沒差,不過type(a.func)不是method 另外就是繼承的話。不知道會不會有問題(沒試) ※ 編輯: tsaiminghan (220.136.125.58 臺灣), 11/21/2022 18:43:18

11/23 01:03, 1年前 , 2F
要留意,a=A(), b=A(), ab兩者的func是指向同一T1實例
11/23 01:03, 2F

11/23 01:06, 1年前 , 3F
ab如果有更多self.obj的操作,可能會有副作用
11/23 01:06, 3F

11/23 01:10, 1年前 , 4F
沒有太高尚大的需求,把T1當作管理不同修飾函數之用
11/23 01:10, 4F

11/23 01:10, 1年前 , 5F
我想很實用了
11/23 01:10, 5F
我猜應該不要平行呼叫執行,就不太會碰到你說的問題吧? ※ 編輯: tsaiminghan (220.136.125.62 臺灣), 11/23/2022 20:10:31

11/23 22:30, 1年前 , 6F
不一定,比如ab有互動: a.func(b),就有可能
11/23 22:30, 6F
文章代碼(AID): #1ZUk_liA (Python)
文章代碼(AID): #1ZUk_liA (Python)