파이썬기초54 : 클래스 외부에서 클래스내부 멤버변수와 멤버메서드 사용
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 2,449 조회
- 0 추천
- 목록
본문
# 클래스 외부에서 클래스내부 멤버변수와 멤버메서드 사용
# private 멤버 속성: 앞의 CounterManager클래스에서 멤버 변수 insCount는 중요한 변수임에도 불구하고 파이썬에서 기본적으로 public속성을 갖기 때문에 클래스의 외부에서 접근하거나 변경할 수 있다. 그래서 파이썬에서는 이름 변경(Naming Mangling)으로 문제를 해결했다. 즉 클래스 내의 멤버 변수나 함수를 정의할 때 ‘__’로 시작하는 경우 클래스 외부에서 참조할 때 자동적으로 ‘_클래스이름__멤버이름’으로 변경된다.
# 변수나 메서드의 이름 앞에 _를 붙인다. 이 경우 해당 클래스 안에서만 사용한다는 규칙이 있다(관례적인 부분)
# 변수나 메서드의 이름 앞에 __를 붙인다. 이 경우 _클래스명__속성명으로 변경해준다.
# 예약어에 속하는 식별자
# _* : 모듈(파일)안에서 _로 시작하는 식별자를 정의하면 내부에서만 사용한다는 관례가 있다. 하지만 접근이 된다.
# __*__ : 식별자의 앞뒤에 __가 붙어 있는 식별자는 시스템에서 정의한 이름이다. 다시 말해 언어 수준에서 준비된 기능을 구현하기 위해 사용되는 이름이다.
# __* : 클래스 안에서 외부로 노출되지 않는 식별자로 인식된다. 이름변경(Naming Mangling)을 통해 접근하기 힘들게 만든다.
#__가 붙은 멤버는 _클래스명__속성명으로 이름변경이 된다.
class BankAccount:
def __init__(self, id, name, balance):
self.__id = id
self.__name = name
self.__balance = balance
def deposit(self, amount):
self.__balance += amount
def withdraw(self, amount):
self.__balance -= amount
def __str__(self):
return "{0}, {1}, {2}".format(self.__id, self.__name, self.__balance)
#인스턴스 객체를 생성
account1 = BankAccount(100, "전우치", 15000)
account1.withdraw(3000)
print(account1)
#클래스 외부에서는 아래와 같이 접근
BankAccount._BankAccount__balance = 35000
print(BankAccount._BankAccount__balance)
관련자료
-
이전
-
다음