我试图以类的形式制作装饰器,因为我要在其中存储一些非常复杂的功能。但是当我尝试“调用”新装饰器时,根本不会通过self
。
class B:
def __init__(self, other):
self.other = other
def __call__(self, *args, **kwargs):
print('B.__call__', self, args, kwargs)
self.other(*args, **kwargs)
class A:
@B
def m(self, *args, **kwargs):
print('A.m', self, args, kwargs)
A().m()
以下是输出:
B.__call__ <__main__.B object at 0x10f43eeb8> () {}
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-20-7636a94e166d> in <module>
----> 1 A().m()
<ipython-input-19-3cd6266a4f37> in __call__(self, *args, **kwargs)
5 def __call__(self, *args, **kwargs):
6 print('B.__call__', self, args, kwargs)
----> 7 self.other(*args, **kwargs)
8
9 class A:
TypeError: m() missing 1 required positional argument: 'self'
我在某处犯错了吗?是否不应该将self
中的*args
放入__call__
的{{1}}中?如果不是,那是什么问题,我该如何解决?