728x90
1. 정보은닉
* '객체.변수' 형식으로 변수에 직접 접근을 막음으로써 객체의 안정성을 높힐 수 있다.
* 직접 접근을 막으면 변수에 메소드를 통한 간접 접근을 하게된다.
* 변수 앞에 __(언더바 2개)를 붙히면, 변수의 직접 접근하면 오류가 발생한다. 언더바 2개를 사용한다면 스페셜 메소드와 비슷한 형태를 갖기에 _(언더바 1개)를 사용해 외부에서 직접접근을 하지말자는 관례적 표현으로 사용함(실제로 언더바 1개를 사용하면 직접접근이 가능함)
* 변수에 __(언더바 2개)를 사용하면, 변수의 이름이 '_Class명__변수명' 으로 바뀌기 때문에 직접접근이 안되는 것
class Person:
def __init__(self, name, age):
self.__name = name # 변수 앞에 __를 넣음으로써 직접접근을 막음
self.__age = age
def plus_age(self, age): # 변수 age 에 접근해 수정하기 위해서 설계한 메소드
if age < 0:
print("나이 정보 오류")
else:
self.__age += age
def __str__(self):
return '{0}: {1}'.format(self.__name, self.__age)
def main():
p = Person('June', 22)
# p.__age += 1 # 오류 발생
# p.age += 1 # 오류 발생
print(p)
p.plus_age(20) # 메소드를 통해 간접 접근한다면 변수를 수정할 수 있음
print(p)
main()
2. __dict__
* 어떤 속성과 값이 객체 내에 있는지 알 수 있는 메소드
* 객체 내에는 __dict__ 이 있으며 이는 딕셔너리다. 또, __dict__에는 해당 객체의 정보가 담긴다.
class Person:
def __init__(self, name, age):
self.__name = name # 변수 앞에 __를 넣음으로써 직접접근을 막음
self.__age = age
def plus_age(self, age): # 변수 age 에 접근해 수정하기 위해서 설계한 메소드
if age < 0:
print("나이 정보 오류")
else:
self.__age += age
def __str__(self):
return '{0}: {1}'.format(self.__name, self.__age)
def main():
p = Person('June', 22)
print(p) # June: 22
print(p.__dict__) # {'_Person__name': 'June', '_Person__age': 22}
main()
728x90
'# Programming Language > Python' 카테고리의 다른 글
[Python] 파이썬 정리(15)_프로퍼티 (0) | 2021.07.31 |
---|---|
[Python] 파이썬 정리(14)_dict가 주는 메모리 부담 해결하는 __slots__ (0) | 2021.07.31 |
[Python] 파이썬 정리(12)_스페셜 메소드/연산자 오버로딩 (0) | 2021.07.31 |
[Python] 파이썬 정리(11)_Object 클래스에 있는 메소드 (0) | 2021.07.31 |
[Python] 파이썬 정리(10)_상속 (0) | 2021.07.31 |