클래스 바깥에서는 접근할 수 없고 클래스 안에서만 사용할 수 있는 (java->private attribute)을 python에서는 어떻게 구현할까?
👉 비공개 속성을 이용하자(__속성)
class Person:
def __init__(self, name, age, address, wallet):
self.name = name
self.age = age
self.adress = address
self.__wallet = wallet #비공개속성
maria = Person('마리아', 20, '서울시 서초구 반포동', 10000)
maria.__wallet -= 10000 #이런식으로 클래스 바깥에서 비공개 속성에 접근하면 에러발생
__wallet을 비공개속성으로 만들었는데 외부에서 비공개속성에 접근했기 때문에 에러가 발생한다.
그렇다면 어떻게 비공개속성에 접근할 수 있을까?
👉 java와 마찬가지로 클래스 안의 메서드를 통해서 wallet에 접근할 수 있다.(private생성자를 만들고 getter,setter를 통해서 접근하는 것과 마찬가지)
class Person:
def __init__(self, name, age, address, wallet):
self.name = name
self.age = age
self.adress = address
self.__wallet = wallet #비공개속성
def pay(self, amount):
self.__wallet -= amount
print(f"이제 {self.__wallet}원 남았네요)
maria = Person('마리아', 20, '서울시 서초구 반포동', 10000)
maria.pay(3000)
# 출력 : 이제 7000원 남았네요
메서드도 외부의 접근을 제한한기 위해 비공개 메서드로 만들 수 있다.
class Person:
def __greeting(self): #비공개 메서드(private)
print('Hello')
def hello(self): #공개 메서드를 통해 비공개 메서드를 사용할 수 있다.(public)
self.__greeting()
👩🏫 두줄요약
java에서 public, private으로 구현하는 은닉을 python에서는 공개,비공개 속성을 부여함으로써 구현할 수 있다.