我想做的是:
@add_cache(cache_this, cache_that, cache_this_and_that)
class MyDjangoModel(models.Model):
blah
但是失败了,因为看起来第一个参数隐含地是实际的类对象。有可能解决这个问题,还是我被迫使用丑陋的语法而不是这种美妙的语法?
答案 0 :(得分:6)
您的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)
...
该示例假设您只想在装饰类上设置一些属性。当然,您可以使用这三个参数执行其他操作。
答案 1 :(得分:3)
编写一个返回适当装饰器的callable。