상속
- 한 클래스의 속성과 메서드를 다른 클래스에 전달하는 기능을 의미합니다.
- 상속을 사용하면, 기존 코드를 재사용하고 확장 할 수 있습니다.
- 기본적으로 파이썬의 모든 클래스는 object라는 기본 클래스로부터 상속받습니다.


Dog라는 클래스가 Animal이라는 클래스로 부터 상속받아 내부에 있는 함수를 사용할 수 있는것을 볼 수 있다.
Animal 클래스를 상속 받았기 때문에 생성자에 있는 매개변수를 반드시 전달해야한다. (전달 안할 시 오류)
클래스 상속 시 생성자 호출 순서
1. 자식 클래스의 생성자(__init__)가 호출됩니다.
2. 자식클래서의 생성자에서 부모클래스 생성자를 호출해야합니다. 이 때, super()함수를 사용하여 부모클래스를 참조하여 부모클래스의 생성자를 호출 할 수 있습니다.
3. 부모 클래스의 생성자가 호출됩니다.
4. 부모 클래스의 생성자가 실행을 마치면 자식 클래스의 생성자로 돌아가 자식 클래스의 그 다음코드가 실행됩니다.
object 클래스
- 파이썬에서 정의하는 모든 클래스는 자동으로 Object 클래스를 상속 받습니다.
- 예를 들면 __str()__ , __repr__(), __eq__(), __hash__() 등이 있습니다. (스페셜 메서드)

메서드 오버라이딩
- 객체지향 프로그래밍에서 중요한 개념으로 자식 클래스에서 부모 클래스의 메서드를 재정의 하는것을 의미합니다.

위 코드에서 eat() 메서드를 자식 클래스에서 재정의 하는것이 오버라이딩 이고, 실행 시 자식이 재정의한 메서드를 실행하게 된다.
부모 클래스의 메서드를 사용하고 싶다면 super()를 사용하면 된다.
재정의 하기 위해선
1. 메서드의 이름
2. 매개변수의 타입과 개수
가 일치해야 재정의 된다.

만약 위 코드처럼 같은 클래스 내부에서 재정의를 했다면 매개변수 두개를 넣어 호출해야 실행이 되고 원래 eat(self, food)는 실행되지 않습니다.
5. 다중 상속
- 둘 이상의 부모 클래스로부터 상속을 받는 기능을 의미합니다.
- 장점 : 여러개의 기본이 되는 클래스를 사용되기 때문에 자식클래스가 많은 내용을 가져다 쓸 수 있습니다.
- 단점 : 복잡해짐, 이름이 겹치는 것들이 많이 생길 수 있습니다.

C3 선형화 알고리즘으로 인해 왼쪽 부모클래스의 상속을 우선시 한다.

만약 두 class의 생성자가 다르고 다른 생성자를 받고 실행을 달리 하고싶으면, 27번줄, 28번줄, 31번줄 처럼 직접 참조를 하면 된다. 만약 직접 참조를 하지 않는다면 Kim은 Animal을 먼저 상속 받기 때문에 sleep()은 오버라이딩 된 Kim 다음 우선 순위는 Animal이다.

상속 우선순위를 보고 싶다면 Child.mro()를 실행해보면 된다. 왼쪽부터 간다.
6. super() 함수
- 파이썬의 내장 함수로써, 상속과 관련된 작업을 수행할 때 사용됩니다.
- 주요 목적은 자실클래스 에서 부모클래스의 메서드를 오버라이드(재정의) 하면서도 그 오버라이드 된 메서드 내에서 부모클래스의 원본 메서드를 호출하는 것입니다.

위 코드를 설명하기 위한 로직 방향 사진을 넣겠다.

문제
- 아래의 다중상속 클래스의 출력이 어떻게 되는지 예측해보자.

-------------------------------------------------------------------------

이렇게 나오는 이유는 Child의 부모는 A,B이다. Child가 실행 우선순위 이기 때문에 A,B는 super를 써서 먼저 실행하게 되는데 이때, A의 super는 같은 선상인 B도 참조 할 수 있다.
'Python' 카테고리의 다른 글
| Python 예외처리 (0) | 2024.09.30 |
|---|---|
| Python 스페셜 Method (0) | 2024.09.30 |
| 객체 지향과 클래스 (2) | 2024.09.27 |
| 콜백함수와 람다함수 (2) | 2024.09.26 |
| 변수의 범위(지역변수, 전역변수, ...) (0) | 2024.09.26 |