[英]How to create a decorator function with arguments on python class?
我想创建一个装饰器函数以对python类进行操作,并能够传递其他参数。 我想在实例化该类之前这样做。 这是我的方法:
def register(x,a):
print x,a
@register(5)
class Foo(object):
pass
x
是类, a
附加参数。 但是我得到了
TypeError: register() takes exactly 2 arguments (1 given)
我想要的是在实例化类之前定义类时获取类Foo
和其他参数的某种方法。
您需要这样做:
def makeDeco(a):
def deco(cls):
print cls, a
return cls
return deco
>>> @makeDeco(3)
... class Foo(object):
... pass
<class '__main__.Foo'> 3
您可以使用functools.wraps
等来修饰它,但这就是想法。 您需要编写一个返回装饰器的函数。 外部“ decorator-making”函数接受a
参数,而内部decorator函数接受该类。
它的工作方式是,当您编写@makeDeco(3)
它将调用makeDeco(3)
。 makeDeco
的返回值是用作装饰器的返回值 。 这就是为什么需要makeDeco
返回要用作装饰器的函数的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.