是否可以使用带参数的Python类装饰器?

我想做的是:

@add_cache(cache_this, cache_that, cache_this_and_that)
class MyDjangoModel(models.Model):
    blah

但失败是因为看起来第一个参数隐含了实际的类对象.有可能解决这个问题,还是我*使用丑陋的语法而不是这种美妙的语法?

解决方法:

您的arg_cache定义需要执行以下操作:

def arg_cache(cthis, cthat, cthisandthat):
   def f(obj):
       obj.cache_this = cthis
       obj.cache_that = cthat
       obj.thisandthat = cthisandthat
       return obj
   return f

@arg_cache(cache_this, cache_that, cache_this_and_that)
...

该示例假设您只想在装饰类上设置一些属性.你当然可以用这三个参数做其他事情.

上一篇:在python中访问装饰器属性?


下一篇:python – 调用Django模型保存/删除后调用函数