다음 코드와 같이 클래스의 __call__을 사용하여 데코레이터를 구현합니다
으아악이 클래스를 데코레이터로 사용하여 함수를 꾸미는 경우.
으아악여기서 문제가 발생합니다. django 또는 다른 Python 프로세스를 시작합니다. 이 param_check 경로를 실행하면 "1111111111"이 처음으로 인쇄되고, 나중에 호출할 때 1111111111111이 인쇄되지 않습니다.
그리고 매번 "2222222222"가 인쇄됩니다. 제가 이해한 바로는 __call__이 이 데코레이터를 처음 정의하는 것이므로 한 번만 실행됩니다. 나중에 다시 요청할 때 정의되었으며 함수 본문 부분인 print 222222222 부분만 실행됩니다. 이 파이썬 데코레이터의 기능을 아는 사람
사실 클래스 데코레이터를 사용할 때 주의할 점이 있습니다. 매개변수가 있는 클래스 데코레이터와 매개변수가 없는 클래스 데코레이터는 실제로 다릅니다
매개변수가 없는 클래스 데코레이터
매개변수 없이 데코레이터를 생성하면 데코레이팅된 메서드가 데코레이터의 생성자(__init__)에 전달되고, 데코레이팅된 함수가 호출되면 데코레이터의 __call__() 메서드가 실행됩니다.
으아악 으아악데코레이션 단계에서는 __init__ 함수가 실행되고, 데코레이션된 메서드가 호출되면 __call__이 실행된다는 점에 유의하세요.
매개변수가 있는 클래스 데코레이터
으아악출력:
으아악장식 단계에서 __call__은 한 번만 호출된다는 것을 분명히 알 수 있습니다
자세한 내용을 알고 싶으시면 여기를 참조하세요: http://www.artima.com/weblogs...