>  Q&A  >  본문

python - __call__을 사용하여 데코레이터 함수 구현

다음 코드와 같이 클래스의 __call__을 사용하여 데코레이터를 구현합니다

으아악

이 클래스를 데코레이터로 사용하여 함수를 꾸미는 경우.

으아악

여기서 문제가 발생합니다. django 또는 다른 Python 프로세스를 시작합니다. 이 param_check 경로를 실행하면 "1111111111"이 처음으로 인쇄되고, 나중에 호출할 때 1111111111111이 인쇄되지 않습니다.
그리고 매번 "2222222222"가 인쇄됩니다. 제가 이해한 바로는 __call__이 이 데코레이터를 처음 정의하는 것이므로 한 번만 실행됩니다. 나중에 다시 요청할 때 정의되었으며 함수 본문 부분인 print 222222222 부분만 실행됩니다. 이 파이썬 데코레이터의 기능을 아는 사람

某草草某草草2641일 전797

모든 응답(1)나는 대답할 것이다

  • 迷茫

    迷茫2017-06-28 09:26:02

    사실 클래스 데코레이터를 사용할 때 주의할 점이 있습니다. 매개변수가 있는 클래스 데코레이터와 매개변수가 없는 클래스 데코레이터는 실제로 다릅니다

    매개변수가 없는 클래스 데코레이터

    매개변수 없이 데코레이터를 생성하면 데코레이팅된 메서드가 데코레이터의 생성자(__init__)에 전달되고, 데코레이팅된 함수가 호출되면 데코레이터의 __call__() 메서드가 실행됩니다.

    으아악 으아악

    데코레이션 단계에서는 __init__ 함수가 실행되고, 데코레이션된 메서드가 호출되면 __call__이 실행된다는 점에 유의하세요.

    매개변수가 있는 클래스 데코레이터

    으아악

    출력:

    으아악

    장식 단계에서 __call__은 한 번만 호출된다는 것을 분명히 알 수 있습니다

    자세한 내용을 알고 싶으시면 여기를 참조하세요: http://www.artima.com/weblogs...

    회신하다
    0
  • 취소회신하다