我正在编写将在class Foo
方法上使用的装饰器。像这样:
class decorator(object):
def __init__(self,func):
self.func = func
def __call__(self,*args,**kwargs):
result = self.func(*args,**kwargs)
# Do stuff
return result
class Foo(object):
def __init__(self,arg):
self.arg = arg
def load(cls,cfg):
# construct object
return cls(arg)
@decorator
def bar(self,x):
# run method
return self
运行代码时,它显示为TypeError: bar() takes exactly 2 arguments (1 given)
该方法的调用方式如下:
def process(cls,cfg,x):
obj = cls.load(cfg)
if obj:
return obj.bar(x)
但是,如果我使用函数定义装饰器,它似乎可以工作。
我在做什么错了?