>  기사  >  백엔드 개발  >  Python의 데코레이터 게터 및 세터

Python의 데코레이터 게터 및 세터

PHPz
PHPz원래의
2024-08-06 03:46:531040검색

Decorator Getters and Setters in Python

데코레이터의 한 유형은 속성 getter와 setter입니다. 이러한 데코레이터를 사용하면 클래스 인스턴스의 변수에 대한 액세스를 제어할 수 있습니다.

속성 getter 및 setter는 객체 지향 프로그래밍의 속성 제어를 위해 특별히 설계되었습니다. 이는 클래스 속성에 사용된다는 점에서 함수 데코레이터와 다릅니다(여기에서 함수 데코레이터에 대한 내 게시물을 확인하세요).

함수 데코레이터와 속성 getter 및 setter 데코레이터는 모두 재사용 가능한 코드로 코드를 수정하고 '@' 구문을 사용합니다. 둘 다 코드의 기능을 변경합니다.

자, 시작해 보겠습니다.

속성 getter 및 setter는 클래스 내의 메서드에 적용되어 다양한 동작을 정의합니다. setter는 속성을 값으로 설정하고 getter는 클래스에서 속성을 가져옵니다. 속성이 먼저 설정됩니다.

예를 살펴보고 분석해 보겠습니다.

class Shoe:
    def __init__(self, brand = "Adidas", size = 9):
        self.brand = brand
        self.size = size
        self._condition = "New"

    @property
    def size(self):
        """The size property"""
        return self._size

    @size.setter
    def size(self, size):
        """size must be an integer"""
        if isinstance(size, int):
            self._size = size
        else:
            print("size must be an integer")

    def cobble(self):
        """Repairs the shoe and sets the condition to 'New'."""
        self.condition = "New"
        print("Your shoe is as good as new!")

    @property
    def condition(self):
        """The condition property"""
        return self._condition

    @condition.setter
    def condition(self, condition):
        self._condition = condition

다음 코드 중 일부를 살펴보겠습니다.

일부 속성(상태, 크기) 앞의 밑줄은 개발자에게 해당 속성이 비공개임을 나타냅니다. 이는 Shoe 클래스의 각 인스턴스(각 신발, 소문자)에만 적용됩니다.

조건과 크기가 다르게 인스턴스화되는 것을 볼 수 있습니다. self._condition = "New"는 신발 클래스의 각 인스턴스(또는 개체)가 "New" 조건으로 인스턴스화됨을 의미합니다. 크기 속성에 대해서도 동일한 작업이 수행되지만 크기는 정수여야 하기 때문에 setter 속성 유효성 검사를 트리거하도록 self._size = 9로 작성되지 않습니다(이를 유효성 검사라고 하는 프로세스입니다). 속성 setter 및 getter 메서드를 통해 실행하는 대신 각 개별 신발 개체의 조건을 직접 설정합니다.

cobble 메소드는 각 신발 객체의 속성을 가져오거나 설정하는 것이 아니라 단순히 작업을 수행하기 때문에 데코레이터가 필요하지 않습니다.

코드를 마지막으로 변경해 보겠습니다. 예를 들어 나중에 크기 속성을 변경할 수 없도록 하려면 어떻게 해야 할까요? 결국, 신발의 크기는 실제로 변하지 않습니다. 그렇죠?

hasattr() 함수를 사용하여 각 신발 객체를 검사할 수 있습니다. '_size'로 표시되는 비공개 크기 속성이 있나요? 그렇다면 변경할 수 없습니다. 구현된 코드는 다음과 같습니다.

 @size.setter
    def size(self, size):
        """size must be an integer and can't be changed once set"""
        if hasattr(self, '_size'):
            raise AttributeError("Can't change size once set")
        if isinstance(size, int):
            self._size = size
        else:
            raise ValueError("size must be an integer")

속성 설정자와 게터는 이해하기가 약간 어렵지만 일단 이해하고 나면 전문가처럼 Python을 코딩하게 될 것입니다!

출처:

아이언 학교 자료

위 내용은 Python의 데코레이터 게터 및 세터의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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