파이썬 객체의 3가지 특징 상속성(inheritance), 다형성(polymorphism), 가시성(visibility)
1. 상속(inheritance)
부모 클래스의 속성과 행동을 그대로 물려받는 자식 클래스를 생성하는 기법
Person의 __init__ method를 Korean이 물려받아서
Korean이 속성을 가지지 않았음에도 불구하고
name,age를 가져서 출력해줌
super()는 부모 클래스를 뜻함
super().__init__(name,age)는 Person의 __init__을 그대로 가져오는거임
super().about_me(self.gender)도 마찬가지다.
그러나 부모의 gender는 사용자가 함수를 사용할 때 입력해야하지만
자식의 gender는 self.gender로 속성값을 그대로 가져온다
부모 a의 about_me에서는 gender를 입력받기 때문에 gender를 입력해줬지만
자식의 about_me에서는 gender를 입력받지 않아서 class의 속성값을 그대로 가져와서 출력했음
2. 다형성(polymorphism)
같은 이름 method의 내부 로직을 다르게 작성하는 경우
같은 목적을 가졌으나 다른 일을 하고 싶게 하는 경우
상속받을 때 주로 발생함
이름이 talk로 다 같은데 하고자하는건 어떤 문자열을 return하는 걸로 동일함
출력 내용이 다름
그렇지만 (특히 for문 순회할때) 이름을 다 다르게 작성하면 if조건문 써서 경우마다 다 다른 함수 이름으로 써줘야하니 비효율적
예를 들면 if animal == cat: animal.talk1()
if animal == dog: animal.talk2()
하지만 파이썬은 이런 불편함 없이 이름이 같아도 알아서 들어가서 맞는걸 사용해줌
3. 가시성(visibility)
객체의 정보를 볼 수 있는 레벨을 조절하는 것임
프로그램을 제품으로 판매할 시 소스를 보호한다거나 사용자가 괜히 잘못 수정하는 것을 방지하거나
필요없는 정보에 굳이 접근하지 못하게 한다던지 누구나 객체의 모든 정보를 볼 필요가 없음
encapsulation
정보 은닉
클래스 간 간섭의 최소화
축구선수가 심판 클래스의 가족 정보를 가져야하나?
3-1) private 변수 선언
위와 같이 아무렇게나 작성하면
인벤토리에 Product가 들어가야하는데 ‘abc’라는 의미없는 것이 들어감
self.__items로 private 변수를 선언함
그렇게 되면 위와 같이 items를 출력해도 에러나면서 접근할수가 없음
하지만 누군가는 사용하고 싶을 수도 있음
property 데코레이터를 이용하면 숨겨진 변수를 반환할 수 있게 해주는데
그러면 .__items로 접근하면 여전히 접근 불가능이지만
.items로 접근하면 접근가능하게 만들어줌
왜냐하면 .items를 하면 property 데코레이터가 지정한 def items 함수를 지정하기때문에
그 함수가 리턴하는 __items값을 리턴해주는거임
4. private 변수 추가 설명
real private 변수는 다른 언어와는 달리 파이썬에서는 존재하지 않는다
real private 변수는 아마 절대로 접근 못하는 private 변수를 말하는듯
파이썬의 하나의 문화?
몰랐는데 property decorator 말고 다른 decorator하면 접근할때 에러나더라
그리고 class 안에 집어넣어야함 class 밖에 decorator 쓰면 접근못하고 에러남
'프로그래밍 > Python' 카테고리의 다른 글
파이썬 개요, VScode 기본 사용법 등등 (0) | 2022.07.18 |
---|---|
class내에서 method 내부에 다른 method 호출하기 (0) | 2022.03.25 |
파이썬 object의 magic method (0) | 2022.02.19 |
파이썬의 지역변수와 전역변수 (0) | 2022.02.17 |
프로그래밍을 한다면 꼭 알아야하는 파일형식 csv, html, xml, json (0) | 2022.02.14 |