>  기사  >  백엔드 개발  >  클래스 필드를 클래스 메서드 데코레이터에 전달하는 방법

클래스 필드를 클래스 메서드 데코레이터에 전달하는 방법

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-18 12:23:03263검색

How to Pass Class Field to Class Method Decorator

클래스 메소드 데코레이터에 클래스 필드 전달

클래스 메소드에서 클래스 필드를 데코레이터에 전달하려고 하면 다음과 같은 오류가 발생할 수 있습니다. 해당 필드가 존재하지 않는다는 오류가 발생했습니다. 이는 클래스 정의 시 필드를 전달하려고 시도하지만 해당 단계에서 사용하지 못할 수 있기 때문에 발생합니다.

해결책 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.