priavte
캡슐화 구현
- 정보은닉인 멤버변수 보호
- 단 자바와 같이 완벽한 캡슐화는 어렵다.
- __ 시작하는 변수는 외부에서 값을 읽거나 바꿀 수 없다.
# private
__a = 10 # 일반변수
def getA(): # 일반함수
return __a
print(getA())
class P : # 클래스생성
__a = 10 # private
b = 20
def getA(self):
return self.__a
def getB(self):
return self.b
def setA(self, a):
self.__a = a
p = P() # 객체생성
# print(p.__a) # 접근불가
print(p.b)
print(p.getA()) # 함수를 통해서는 접근 가능
print(p._P__a) # private 멤버 접근 방법을 제공. 완벽한 캡슐화는 불가능.
p.setA(100) # 데이터 바꾸기 위해 setA생성후 100넣어줌
print(p.getA())
캡슐화
# 캡슐화
class Person :
__name = ""
__age = 0
__height = 0.0
def setName(self, name):
if len(name) > 10 or name == "":
print("이름을 바르게 입력하세요")
else :
self.__name = name
def setAge(self, age):
if age < 1 or age > 140 :
print("나이를 바르게 입력하세요")
else :
self.__age = age
def setHeight(self, height):
if height < 40 or height > 200 :
print("키를 바르게 입력하세요")
else :
self.__height = height
def getName(self):
return self.__name
def getAge(self):
return self.__age
def getHeight(self):
return self.__height
kim = Person()
kim.setName("홍길동동주앙펠릭스트라이커")
kim.setAge(150)
kim.setHeight(300)
print("이름 :",kim.getName())
print("나이 :",kim.getAge())
print("키 :",kim.getHeight())
lee = Person()
lee.setName("이순신")
lee.setAge(30)
lee.setHeight(180)
print("이름 :",lee.getName())
print("나이 :",lee.getAge())
print("키 :",lee.getHeight())
생성자 소멸자
‘init’
- 객체가 인스턴스화될 때 호출되는 특수 메소드
- 내장함수의 형식은 모두 동일하게 함수의 이름 앞뒤로 더블 언더 스코어로 선언
- 객체가 생성될 때 초기화 명령들이 필요할 때 유용하게 사용된다.
- 단 중복 생성자는 허용되지 않는다