Ale*_*lex 4 python decorator python-2.7
我想创建一个装饰器函数来操作python类,并能够传递其他参数.我想在类实例化之前这样做.这是我的方法:
def register(x,a):
print x,a
@register(5)
class Foo(object):
pass
Run Code Online (Sandbox Code Playgroud)
与x作为类a的附加参数.但我得到了一个
TypeError: register() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
我想要的是Foo在实例化类之前,在定义类时获取类和其他参数的某种方法.
你需要这样做:
def makeDeco(a):
def deco(cls):
print cls, a
return cls
return deco
>>> @makeDeco(3)
... class Foo(object):
... pass
<class '__main__.Foo'> 3
Run Code Online (Sandbox Code Playgroud)
你可以使用functools.wraps等等来修饰它,但这就是主意.您需要编写一个返回装饰器的函数.外部"装饰器制作"函数接受a参数,内部装饰器函数接受类.
它的工作方式是当你写@makeDeco(3)它时makeDeco(3).该返回值的makeDeco就是被用作装饰.这就是为什么你需要makeDeco返回你想用作装饰器的函数.