데이터 캡슐화를 위해 대부분의 객체 지향 언어는 getter 및 setter 메서드를 사용합니다. 이는 다른 클래스의 메서드에 의해 데이터가 우발적으로 수정되지 않도록 다른 클래스에서 개체 클래스의 속성을 숨기고 싶기 때문입니다.
이름에서 알 수 있듯이 getter는 private 속성에 액세스하거나 private 속성 값을 가져오는 데 도움이 되는 메서드이고 setter는 private 속성 값을 변경하거나 설정하는 데 도움이 되는 메서드입니다.
비공개 속성 액세스
아래에 추가 메서드를 만들지 않고 클래스를 만들고 초기화하고 변수에 액세스하는 코드를 작성합니다.
예시
class year_graduated: def __init__(self, year=0): self._year = year # Instantiating the class grad_obj = year_graduated() #Printing the object print(grad_obj) #Printing the object attribute print(grad_obj.year)
출력
위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -
<__main__.year_graduated object at 0x00F2DD50> 0
첫 번째 print 문은 생성된 객체의 세부 정보를 제공하는 반면 두 번째 print 객체는 private 속성의 기본값을 제공합니다.
게터 및 세터 사용
아래 예제에서 우리는 클래스를 만들고, initialize is를 만든 다음 각각에 getter 및 setter 메서드를 추가합니다. 그런 다음 클래스를 인스턴스화하고 이러한 getter 및 setter 메서드를 사용하여 이러한 메서드의 변수에 액세스합니다. 따라서 setter 메서드 안에 논리를 숨길 수 있습니다.
예시
class year_graduated: def __init__(self, year=0): self._year = year # getter method def get_year(self): return self._year # setter method def set_year(self, a): self._year = a grad_obj = year_graduated() # Before using setter print(grad_obj.get_year()) # After using setter grad_obj.set_year(2019) print(grad_obj._year)
출력
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
0 2019
속성을 비공개로 설정
다음 예에서 우리는 메소드를 private로 만들어서 내부의 변수가 외부 호출 함수에 의해 조작될 수 없도록 하는 방법을 봅니다. 클래스 내부의 함수로만 조작할 수 있습니다. 두 개의 밑줄을 접두사로 사용하여 비공개가 됩니다.
예시
class year_graduated: def __init__(self, year=32): self._year = year # make the getter method def get_year(self): return self.__year # make the setter method def set_year(self, a): self.__year = a grad_obj = year_graduated() print(grad_obj._year) # Before using setter print(grad_obj.get_year()) # # # After using setter grad_obj.set_year(2019) print(grad_obj._year)
출력
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
32 AttributeError: 'year_graduated' object has no attribute '_year_graduated__year'
비공개 메소드에서 값 읽기
아니요, getter 메서드를 사용하지 않고 property 메서드를 사용하여 private 속성 값에 액세스할 수 있습니다.
예시
class year_graduated: def __init__(self, year=32): self._year = year @property def Aboutyear(self): return self.__year @Aboutyear.setter def Aboutyear(self, a): self.__year = a grad_obj = year_graduated() print(grad_obj._year) grad_obj.year = 2018 print(grad_obj.year)
출력
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
32 2018