Python 장식 기 를 어떻게 해제 합 니까?
하나의 장식 기 는 이미 함수 에 작용 하고 있 습 니 다.취소 하려 면 원본 포장 되 지 않 은 함수 에 직접 접근 하 십시오.
해결 방안
장식 기 가@wraps 를 통 해 이 루어 진다 고 가정 하면 방문wrapped__ 원본 함수 에 접근 하기 위 한 속성:
>>> @somedecorator
>>> def add(x, y):
... return x + y
...
>>> orig_add = add.__wrapped__
>>> orig_add(3, 4)
7
>>>
토론 하 다.포장 되 지 않 은 원시 함수 에 직접 접근 하 는 것 은 디 버 깅,내성 및 기타 함수 작업 에 유용 합 니 다.그러나 우리 가 있 는 이곳 의 방안 은 포장 기 에서
@wraps
속성 을 정확하게 사용 하거나 __wrapped__
속성 을 직접 설정 한 경우 에 만 적용 된다.만약 여러 개의 포장 기 가 있다 면
__wrapped__
속성 을 방문 하 는 행 위 는 예측 할 수 없 으 므 로 이렇게 하 는 것 을 피해 야 한다.Python 3.3 에서 모든 포장 층 을 생략 합 니 다.예 를 들 어 다음 과 같은 코드 가 있다 면:
from functools import wraps
def decorator1(func):
@wraps(func)
def wrapper(*args, **kwargs):
print('Decorator 1')
return func(*args, **kwargs)
return wrapper
def decorator2(func):
@wraps(func)
def wrapper(*args, **kwargs):
print('Decorator 2')
return func(*args, **kwargs)
return wrapper
@decorator1
@decorator2
def add(x, y):
return x + y
다음은 Python 3.3 에서 테스트 하 겠 습 니 다.
>>> add(2, 3)
Decorator 1
Decorator 2
5
>>> add.__wrapped__(2, 3)
5
>>>
다음은 Python 3,4 에서 테스트 하 겠 습 니 다.
>>> add(2, 3)
Decorator 1
Decorator 2
5
>>> add.__wrapped__(2, 3)
Decorator 2
5
>>>
마지막 으로 모든 장식 기 가 사용 되 는 것 은 아니 기 때문에 이곳 의 방안 이 모두 적용 되 는 것 은 아니다.특히 내 장 된 장식 기@wraps
와@staticmethod
는 이 약속 을 따 르 지 않 았 다.이상 은 Python 이 인 테 리 어 를 어떻게 해제 하 는 지 에 대한 상세 한 내용 입 니 다.Python 인 테 리 어 해제 에 관 한 자 료 는 다른 관련 글 에 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.