초보 개발자
24강 상속 본문
[부모 클래스와 자식 클래스]
class A와 class Z가 있고 Z가 A를 상속한다면(받음) A가 가지고 있는 메서드들을 가지고 오고, 또 새로운 메서드를 추가할 수도이 있다.
A클래스 : 부모 클래스, 슈퍼 클래스, 상위클래스
Z클래스 : 자식 클래스, 서브 클래스, 하위 클래스
# father_son.py
class Father:
def run(self):
print('so fast!')
class Mother:
def dive(self):
print('so deep!')
class Son(Father, Mother):
def jump(self):
print('so high!!')
def main():
s = Son()
s.run()
s.jump()
s.dive()
main()
father와 mother을 동시 상속하는 Son클래스이다.
이렇게 둘 이상의 클래스를 상속하는 것도 가능하지만 구조가 복잡해지고 주의 사항이 늘어나기에 일반적으로는 둘 이상을 동시에 상속하지 않는다.
[메소드 오버라이딩과 super]
# father_son.py
class Father:
def run(self):
print('so fast! dad style')
class Son(Father, Mother):
def run(self):
print(so fast! son style')
def main():
s = Son()
s.run()
main()
아빠의 메서드와 아빠를 상속한 아들의 메소드를 보면 같은 것을 알 수 있다.
이 경우 덮어쓴다고 말한다. (오버라이딩) 이 경우 상속받으면 Son객체의 안에 2개의 run 메서드가 존재한다.
하나는 물려받은 것, 자신이 정의한 것 여기서 run을 실행하면 아빠의 run은 가려져 Son의 run이 실행이 된다.
여기서 가려진 부모의 run을 실행하고 싶다면 super().run()이렇게 해주면 실행이된다. super()로 부모의 것을 불러오는 것이다.
그럼 굳이 왜 상속을 받는지 잘 모를 수 있겠지만 이건 기능 보강을 위해서 필요하다.
# father_son.py
class Father:
def run(self):
print('so fast! dad style')
class Son(Father, Mother):
def run(self):
print(so fast! son style')
def run2(self):
super().run() # 부모클래스의 run 호출 방법, 가려진 run 호출 방법!
def main():
s = Son()
s.run()
s.run2()
main()
[__init__ 메소드의 오버라이딩]
메소드 오버라이딩을 할 수밖에 없으면서 동시에 가려진 메소드를(오버라이딩 된 메소드를)호출해야만 하는 상황이 있이서 이를 소개하려고 한다.
자식 클래스의 의무중 하나는 부모의 변수들을 적절히 초기화 시켜줘야 한다는 것이다.
상속받아서 자식클래스를 생성할 때 자식 클래스의 변수들만 초기화 시켜주면 안되고, 부모의 변수들까지 인자로 받아서 초기화를 같이 시켜주어야 한다는 것이다.
부모클래스의 코드를 생략하였다.
class Truck(Car):
def __init__(self,id,f,c):
super().__init__(id,f) # 부모 C의 __init__ 메소드를 호출한다.
self.cargo = c
부모의 생성자 함수는 __init__(id,f)일 것이다. 따라서 자식이 이를 적절히 초기화 시켜주어야 된다. 선택이 아니라 필수이다.
def show_info(self):
super().show_info() # Car의 show_info 메소드 호출
print( "cargo:", self.cargo)
이 건 부모의 show_info를 사용하고 또 자신이 그 아래에 더 추가해 나가는 예이다. 앞서 기능보강이라고 말한 것이 이러한 것을 의미한다.
'Python > 윤성우 열혈 파이썬' 카테고리의 다른 글
27강 연산자 오버로딩 (0) | 2022.01.24 |
---|---|
26강 스페셜 메소드 (0) | 2022.01.18 |
23강 클래스와 객체의 본질 (0) | 2022.01.18 |
22강 메소드 기반 문자열 조합 (0) | 2022.01.17 |
21강 표현식 기반 문자열 조합 (0) | 2022.01.17 |