Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬의 게터와 세터

<시간/>

데이터 캡슐화를 위해 대부분의 객체 지향 언어는 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