作者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://webptt.com/cn.aspx?n=bbs/Python/M.1669001199.A.B0A.html
1F:推 pent: 在执行上,会有怎样的差别? 11/21 16:32
上面的code的话,用起来没差,不过type(a.func)不是method
另外就是继承的话。不知道会不会有问题(没试)
※ 编辑: tsaiminghan (220.136.125.58 台湾), 11/21/2022 18:43:18
2F:推 poototo: 要留意,a=A(), b=A(), ab两者的func是指向同一T1实例 11/23 01:03
3F:推 poototo: ab如果有更多self.obj的操作,可能会有副作用 11/23 01:06
4F:→ poototo: 没有太高尚大的需求,把T1当作管理不同修饰函数之用 11/23 01:10
5F:→ poototo: 我想很实用了 11/23 01:10
我猜应该不要平行呼叫执行,就不太会碰到你说的问题吧?
※ 编辑: tsaiminghan (220.136.125.62 台湾), 11/23/2022 20:10:31
6F:推 poototo: 不一定,比如ab有互动: a.func(b),就有可能 11/23 22:30