> 백엔드 개발 > 파이썬 튜토리얼 > Python의 @property 데코레이터는 속성을 생성하기 위해 어떻게 작동합니까?

Python의 @property 데코레이터는 속성을 생성하기 위해 어떻게 작동합니까?

Patricia Arquette
풀어 주다: 2024-12-19 01:12:11
원래의
566명이 탐색했습니다.

How Does Python's @property Decorator Work to Create Properties?

Python의 @property 데코레이터 이해

Python에서 @property 데코레이터를 사용하면 일반 인스턴스 속성처럼 동작하는 속성을 생성할 수 있습니다. 그러나 인수를 취하는 내장 속성 함수와 달리 @property 데코레이터는 명시적으로 인수를 받지 않습니다.

작동 방식

@property가 어떻게 작동하는지 이해하려면 데코레이터가 작동하려면 먼저 property() 함수가 설명자 객체를 반환한다는 점을 이해하는 것이 중요합니다. 이는 인스턴스와 해당 속성 사이에 위치하여 추가 논리를 적용할 수 있도록 하는 중개자입니다.

설명자 개체

속성이 반환하는 설명자 개체( ) 함수에는 세 가지 내장 메소드가 있습니다:

  • getter: 속성 값을 검색하려면
  • setter: 속성 값을 설정하려면
  • deleter: 속성을 ​​삭제하려면

다음을 사용하여 속성 만들기 Decorator

@property 데코레이터를 함수에 적용하면 설명자 개체를 반환하고 이를 속성 이름에 할당합니다. 이 객체는 원래 함수의 getter 함수를 유지하며 속성의 setter 및 deleter 메서드에 위임하는 두 개의 추가 함수를 포함합니다.

예:

class C:
    def __init__(self):
        self._x = None

    @property
    def x(self):
        """I'm the 'x' property."""
        return self._x
로그인 후 복사

위 코드는 명시적인 속성 개체 없이 self._x 값을 검색할 수 있는 "x"라는 속성입니다. getter 함수는 데코레이터에 의해 자동으로 생성됩니다.

Setter 및 Delter 데코레이터

setter 및 deleter 메서드를 추가하려면 @property에 .setter 및 .deleter를 추가하기만 하면 됩니다. 설명자 개체, 원하는 기능 전달:

@x.setter
def x(self, value):
    self._x = value

@x.deleter
def x(self):
    del self._x
로그인 후 복사

이러한 메서드를 사용하면 속성 값을 설정하고 삭제하기 위한 사용자 정의 동작을 구현할 수 있습니다.

구현 세부 정보

@property에 대한 @designer 구문은 구문 설탕입니다. 뒤에서 다음 코드가 실행됩니다.

def x(self): return self._x
x = property(x)
로그인 후 복사

설명자 예

다음은 속성 설명자의 순수 Python 구현이 작동하는 방식에 대한 예입니다.

class Property:
    def __init__(self, fget=None, fset=None, fdel=None, doc=None):
        self.fget = fget
        self.fset = fset
        self.fdel = fdel
        self.__doc__ = doc

    def __get__(self, obj, objtype=None):
        if obj is None:
            return self
        if self.fget is None:
            raise AttributeError("unreadable attribute")
        return self.fget(obj)
로그인 후 복사

이 클래스를 사용하면 getter, setter 및 deleter를 사용하여 속성을 수동으로 생성할 수 있습니다. 기능을 제공합니다.

위 내용은 Python의 @property 데코레이터는 속성을 생성하기 위해 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿