__call__装饰器未传递自变量

时间:2019-03-21 18:34:01

标签: python decorator callable

我试图以类的形式制作装饰器,因为我要在其中存储一些非常复杂的功能。但是当我尝试“调用”新装饰器时,根本不会通过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}}中?如果不是,那是什么问题,我该如何解决?

0 个答案:

没有答案