클래스 메소드 데코레이터에 클래스 필드 전달
클래스 메소드에서 클래스 필드를 데코레이터에 전달하려고 하면 다음과 같은 오류가 발생할 수 있습니다. 해당 필드가 존재하지 않는다는 오류가 발생했습니다. 이는 클래스 정의 시 필드를 전달하려고 시도하지만 해당 단계에서 사용하지 못할 수 있기 때문에 발생합니다.
해결책 1: 런타임 확인
이 문제를 해결하려면 대신 런타임에 필드를 확인하는 것이 좋습니다. 이는 메서드 인수를 가로채도록 데코레이터를 수정하여 달성할 수 있습니다. 여기서 첫 번째 인수는 인스턴스가 됩니다. 그런 다음 .:
<code class="python">def check_authorization(f): def wrapper(*args): print(args[0].url) return f(*args) return wrapper class Client(object): def __init__(self, url): self.url = url @check_authorization def get(self): print('get') Client('http://www.google.com').get()</code>
해결 방법 2: 속성 이름을 문자열
을 사용하여 인스턴스 속성에 액세스할 수 있습니다. 데코레이터에서 속성 이름을 하드코딩하지 않으려는 경우 , 문자열로 전달할 수 있습니다:
<code class="python">def check_authorization(attribute): def _check_authorization(f): def wrapper(self, *args): print(getattr(self, attribute)) return f(self, *args) return wrapper return _check_authorization</code>
위 내용은 클래스 필드를 클래스 메서드 데코레이터에 전달하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!