作者tsaiminghan (nahgnimiast)
看板Python
標題Re: [問題] decorator class in a class
時間Mon Nov 21 11:26:36 2022
後來發現缺少的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