접근지정 및 Property - Tirrilee/TechTalk GitHub Wiki

접근지정

Python에서는 이름 규칙을 통해 접근 지정을 한다.

  • 밑줄이 없으면 이는 공개 모드로서 객체 외부에서 접근이 가능한다.
  • 밑줄이 하나이면 이는 비공개 모드로서 객체 외부에서 접근해서는 안된다.
  • 밑줄이 두 개이면 이는 보호 모드로서 객체 외부뿐만 아니라 상속받은 객체에서도 접근이 안된다.
# 접근 지정 예제

class Car:
    def __init__(self):
        self.price = 2000     # 공개 모드
        self._speed = 0       # 비공개 모드
        self.__color = "red"  # 보호 모드

if __name__ == "__main__":
    my_car = Car()
    print(my_car.price)       # 출력 성공
    print(my_car._speed)      # 출력 성공
    print(my_car.__color)     # 출력 실패

Property

객체의 속성만을 접근할 때 메서드를 호출하는 방식은 매우 성가시다. 그렇다고 객체의 속성을 바로 접근하는 것은 캡슐화를 어기는 행위며 이를 해결하기 위해 Property라는 개념이 나오게 되었다.

@property # 다음의 메서드 이름으로 접근가능 @메서드_이름.setter # 다음의 메서드 이름으로 설정가능

예시

class Car:
    def __init__(self):
        self._price = 0
        self._speed = 0
        self._color = None

    @property
    def price(self):
        return self._price

    @price.setter
    def price(self, value):
        self._price = value

if __name__ == "__main__":
    my_car = Car()

    my_car.price = 2000