Python의 @property 데코레이터 이해
Python에서 @property 데코레이터를 사용하면 일반 인스턴스 속성처럼 동작하는 속성을 생성할 수 있습니다. 그러나 인수를 취하는 내장 속성 함수와 달리 @property 데코레이터는 명시적으로 인수를 받지 않습니다.
작동 방식
@property가 어떻게 작동하는지 이해하려면 데코레이터가 작동하려면 먼저 property() 함수가 설명자 객체를 반환한다는 점을 이해하는 것이 중요합니다. 이는 인스턴스와 해당 속성 사이에 위치하여 추가 논리를 적용할 수 있도록 하는 중개자입니다.
설명자 개체
속성이 반환하는 설명자 개체( ) 함수에는 세 가지 내장 메소드가 있습니다:
다음을 사용하여 속성 만들기 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!