정보 은닉

이승주·2024년 8월 9일

파이썬 문법 정리

목록 보기
10/10
post-thumbnail
class Person:
    def __init__(self, name, age, adress=None):
        self.__name = name
        self.__age = age
        self.__adress = adress

    def set_name(self, name):
        if len(name) >= 2:
            self.__name = name
        else:
            print("이름은 두 글자 이상 넣어주세요.")

    def get_name(self):
        return self.__name


    def set_age(self, age):
        if age > 0:
            self.__age = age
        else:
            print("나이는 0보다 큰 값이여야합니다.")

    def get_age(self):
        return self.__age
    
    name = property(get_name, set_name)
    age = property(get_age, set_age)



p = Person('유지민', 22, '수원') ##private(_Person4__age)에 해당 값이 들어감

print(dir(p)) ##_Person__age(private)와 __age(거짓정보)라는 두개의 인스턴스가 생성된것을 확인할 수 있다.
print(p.__dict__) ##Person의 private 값을 딕셔너리로 출력

p._Person__age = 25 ##_Person__age(private)에 해당 값을 할당
# print(p.__age) ##_age(거짓정보)는 없으므로 에러 발생

p.__name = '손흥민' ##__name(거짓정보)에 해당 값을 할당
p.set_name('김범수') ##_Person__name(private)에 해당 값을 할당

p.__age = 30 ##__age(거짓정보)에 해당 값을 할당
p.set_age(40) ##_Person__age(private)에 해당 값을 할당

print(p.get_age()) ##__age의 private 값을 딕셔너리로 출력
print(p.get_name()) ##__name의 private 값을 딕셔너리로 출력

p = Person('손흥민', 30, '부산')
p.name = "김범수" ##property에 의해 setter 부분의 메소드인 set_name의 매개변수에 할당됨
print(p.name) ##private(_Person_name)의 값을 출력

p.age = 40 ##property에 의해 setter 부분의 메소드인 set_age의 private(_Person_age)에 할당됨
print(p.age) ##private(_Person_age)의 값을 출력
profile
개발자 공부

0개의 댓글