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)의 값을 출력