看板 Python 關於我們 聯絡資訊
後來發現缺少的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
pent: 在執行上,會有怎樣的差別? 11/21 16:32
上面的code的話,用起來沒差,不過type(a.func)不是method 另外就是繼承的話。不知道會不會有問題(沒試) ※ 編輯: tsaiminghan (220.136.125.58 臺灣), 11/21/2022 18:43:18
poototo: 要留意,a=A(), b=A(), ab兩者的func是指向同一T1實例 11/23 01:03
poototo: ab如果有更多self.obj的操作,可能會有副作用 11/23 01:06
poototo: 沒有太高尚大的需求,把T1當作管理不同修飾函數之用 11/23 01:10
poototo: 我想很實用了 11/23 01:10
我猜應該不要平行呼叫執行,就不太會碰到你說的問題吧? ※ 編輯: tsaiminghan (220.136.125.62 臺灣), 11/23/2022 20:10:31
poototo: 不一定,比如ab有互動: a.func(b),就有可能 11/23 22:30