2010-11-24 6 views
3

내가 뭘하고 싶은 건지 :인수가있는 Python 클래스 데코레이터를 사용할 수 있습니까?

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

하지만 그것은 첫 번째 인수가 암시 적으로 실제 클래스 개체 인 것 같습니다 때문에 실패합니다. 이 문제를 해결할 수 있습니까? 아니면 내가이 아름다운 구문과 반대되는 추악한 구문을 사용해야합니까?

답변

5

귀하의 arg_cache 정의는 뭔가를 할 필요가있다. 물론 세 가지 매개 변수를 사용하여 다른 작업을 수행 할 수 있습니다.

+1

내 의견으로는 중첩 된 함수의 인수를'f (cls)'처럼 좀 더 설명적인 이름으로 지정하는 것이 더 나을 것입니다. 설명의 방법으로 조금 더 좋았을 것입니다. – martineau

4

적절한 데코레이터를 반환하는 호출 가능 개체를 작성합니다. 예 방금 장식 된 클래스에서 일부 속성을 설정하려는 가정

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) 
... 

:

관련 문제