繁体   English   中英

如何在python类上创建带有参数的装饰器函数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM