Python Language
속성 액세스
수색…
통사론
-
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