我们说我有一个定义装饰器的类
<div class="quicklinks">
<span class="glyphicon glyphicon-chevron-up"></span>
</div>
然后我决定在另一个类中调用那个装饰器:
class Foo():
def decorate(param):
def wrapper(func):
def wrapped(*args, **kwargs):
# do something
return func(*args, **kwargs)
return wrapped
return wrapper
这会引发class Bar():
foo = Foo()
param = something
@foo.decorate(param)
def func():
# do something
例外:
TypeError
我无法理解这里出了什么问题。应用相同的装饰器,但在同一个类TypeError: decorate() takes 1 positional argument but 2 were given
中定义的工作正常,但为什么它不适用于不同的类?
答案 0 :(得分:1)
你的decorate()
函数应该是一个实例方法,因此它接受实例本身作为第一个参数,当你调用 - @foo.decorate(param)
时,你试图传递两个参数(自{{ 1}}是实例本身的foo
类的实例,以及导致该问题的Foo
。
您应该将param
方法转换为接受实例作为第一个参数。示例 -
decorate()
另一方面,您的class Foo():
def decorate(self, param):
def wrapper(func):
def wrapped(*args, **kwargs):
# do something
return func(*args, **kwargs)
return wrapped
return wrapper
也是一种实例方法,也需要func()
。示例 -
self
答案 1 :(得分:1)
你只是忘了包含$("#Ebda2").append('<div class="water"> ...every thing inside... </div>');
;你正在调用绑定方法self
,所以实例将被传入:
Foo().decorate()
请注意,这同样适用于您的class Foo():
def decorate(self, param):
功能:
Bar.func()