이번에는 클래스 바깥에서는 접근할 수 없고 클래스 안에서만 사용할 수 있는 비공개 속성(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'
실행을 해보면 에러가 발생합니다. self.__wallet처럼 앞에 밑줄 두 개를 붙여서 비공개 속성으로 만들었으므로 클래스 바깥에서 maria.__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원 남았네요.
비공개 메서드 사용하기
속성뿐만 아니라 메서드도 이름이 __(밑줄 두 개)로 시작하면 클래스 안에서만 호출할 수 있는 비공개 메서드가 됩니다.
class Person:
def __greeting(self):
print('Hello')
def hello(self):
self.__greeting() # 클래스 안에서는 비공개 메서드를 호출할 수 있음
james = Person()
james.__greeting() # 에러: 클래스 바깥에서는 비공개 메서드를 호출할 수 없음
'Python' 카테고리의 다른 글
| 정적 메서드 / 클래스 메서드 (0) | 2026.01.28 |
|---|---|
| 특수 메서드 (0) | 2026.01.28 |
| 속성 (0) | 2026.01.26 |
| 클래스와 메서드 만들기 (0) | 2026.01.26 |
| 클로저 (0) | 2026.01.25 |
댓글