비공개 속성, 메서드 사용하기
클래스 바깥에서는 접근할 수 없고 클래스 안에서만 사용할 수 있는 비공개 속성(private attribute)을 사용해보겠습니다.
비공개 속성은 클래스 안의 메서드에서만 접근할 수 있습니다.
비공개 속성은 __속성과 같이 이름이 __(밑줄 두 개)로 시작해야 합니다.
단, __속성__처럼 밑줄 두 개가 양 옆에 왔을 때는 비공개 속성이 아니므로 주의해야 합니다.
class 클래스이름:
def __init__(self, 매개변수)
self.__속성 = 값
class Person:
def __init__(self, name, age, address, wallet):
self.name = name
self.age = age
self.address = address
self.__wallet = wallet # 변수 앞에 __를 붙여서 비공개 속성으로 만듦
maria = Person('마리아', 20, '서울시 서초구 반포동', 10000)
maria.__wallet -= 10000 # 클래스 바깥에서 비공개 속성에 접근하면 에러가 발생함
Traceback (most recent call last):
File "C:\project\class_private_attribute_error.py", line 9, in <module>
maria.__wallet -= 10000 # 클래스 바깥에서 비공개 속성에 접근하면 에러가 발생함
AttributeError: 'Person' object has no attribute '__wallet'
class Person:
def __init__(self, name, age, address, wallet):
self.name = name
self.age = age
self.address = address
self.__wallet = wallet # 변수 앞에 __를 붙여서 비공개 속성으로 만듦
def pay(self, amount):
self.__wallet -= amount # 비공개 속성은 클래스 안의 메서드에서만 접근할 수 있음
print('이제 {0}원 남았네요.'.format(self.__wallet))
maria = Person('마리아', 20, '서울시 서초구 반포동', 10000)
maria.pay(3000)
이제 7000원 남았네요.
공개 속성과 비공개 속성
클래스 바깥에서 접근할 수 있는 속성을 공개 속성(public attribute)이라 부르고, 클래스 안에서만 접근할 수 있는 속성을 비공개 속성(private attribute)이라 부릅니다.
비공개 메서드 사용하기
속성뿐만 아니라 메서드도 이름이 __(밑줄 두 개)로 시작하면 클래스 안에서만 호출할 수 있는 비공개 메서드가 됩니다.
비공개 메서드도 메서드를 클래스 바깥으로 드러내고 싶지 않을 때 사용합니다. 보통 내부에서만 호출되어야 하는 메서드를 비공개 메서드로 만듭니다.
class Person:
def __greeting(self):
print('Hello')
def hello(self):
self.__greeting() # 클래스 안에서는 비공개 메서드를 호출할 수 있음
james = Person()
james.__greeting() # 에러: 클래스 바깥에서는 비공개 메서드를 호출할 수 없음
'BASIC' 카테고리의 다른 글
정적 메서드 / 클래스 메서드 (0) | 2023.11.17 |
---|---|
특수 메서드 (0) | 2023.11.17 |
위치 인수, 키워드 인수 (0) | 2023.11.17 |
튜플 응용하기 (1) | 2023.10.09 |
map (0) | 2023.10.09 |
댓글