수색…


통사론

  • x.title # Accesses the title attribute using the dot notation
  • x.title = "Hello World" # Sets the property of the title attribute using the dot notation
  • @property # Used as a decorator before the getter method for properties
  • @title.setter # Used as a decorator before the setter method for properties

점 표기법을 사용한 기본 속성 액세스

샘플 수업을 들어 봅시다.

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

book1 = Book(title="Right Ho, Jeeves", author="P.G. Wodehouse")

파이썬에서는 점 표기법을 사용하여 클래스의 속성 제목 에 액세스 할 수 있습니다.

>>> book1.title 
'P.G. Wodehouse'

속성이 존재하지 않으면 Python은 다음과 같은 오류를 발생시킵니다.

>>> book1.series
Traceback  (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Book' object has no attribute 'series'

세터, 게터 및 속성

데이터 캡슐화를 위해 때로는 다른 속성에서 오는 값 또는 일반적으로 어떤 값이 현재 계산되어야 하는지를 원하는 속성이 필요합니다. 이 상황을 처리하는 표준 방법은 getter 또는 setter라고하는 메서드를 만드는 것입니다.

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

위 예제에서 제목과 저자가 포함 된 새 책을 만들면 어떤 일이 발생하는지 쉽게 볼 수 있습니다. 도서관에 추가 할 모든 책에 저자와 제목이 있다면, getters와 setter를 건너 뛰고 점 표기법을 사용할 수 있습니다. 그러나 저자가없는 책이 있고 저자를 "알 수 없음"으로 설정하고 싶다고 가정 해보십시오. 또는 저자가 여러 명이 있고 저자 목록을 반환 할 계획입니다.

이 경우 author 속성에 대한 getter 및 setter를 만들 수 있습니다.

class P:
    def __init__(self,title,author):
        self.title = title
        self.setAuthor(author)

    def get_author(self):
        return self.author

    def set_author(self, author):
        if not author: 
            self.author = "Unknown"
        else:
            self.author = author

이 계획은 권장되지 않습니다.

한 가지 이유는 catch가 있다는 것입니다. public 속성을 사용하고 메소드가없는 클래스를 설계했다고 가정 해 봅시다. 사람들은 이미 그것을 많이 사용했고 다음과 같은 코드를 작성했습니다 :

>>> book = Book(title="Ancient Manuscript", author="Some Guy")
>>> book.author = ""  #Cos Some Guy didn't write this one!

이제 우리에게는 문제가 있습니다. 저자 는 속성이 아니기 때문에! 파이썬은 속성이라는이 문제에 대한 해결책을 제시합니다. 속성을 가져 오는 메소드는 헤더 앞에 @property로 장식되어 있습니다. 우리가 setter로서 기능하고자하는 메소드는 앞에 @ attributeName.setter로 장식되어있다.

이를 염두에두고 새로운 업데이트 된 클래스를 만들었습니다.

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

    @property
    def author(self):
        return self.__author

    @author.setter
    def author(self, author):
        if not author: 
            self.author = "Unknown"
        else:
            self.author = author

일반적으로 파이썬은 같은 이름과 다른 개수의 매개 변수를 가진 여러 메소드를 가질 수 없다는 것에주의하십시오. 그러나이 경우 Python에서는 데코레이터를 사용하기 때문에이 작업을 허용합니다.

우리가 코드를 테스트한다면 :

>>> book = Book(title="Ancient Manuscript", author="Some Guy")
>>> book.author = ""  #Cos Some Guy didn't write this one!
>>> book.author 
Unknown 


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow