상속 — 복사 없이 확장
클래스가 다른 클래스 상속 가능 — class Dog(Animal):. 서브클래스가 부모의 모든 속성 + 메서드 받고, 추가 / override 가능. 잘 쓰면 "is-a" 관계 모델 — Dog *is an* Animal. 잘못 쓰면 동작 override 의 엉킨 실타래 — 아무도 못 따라가.
super() — 부모 버전 호출
메서드 override 할 때 종종 부모가 하는 거 + 자기 로직 추가하고 싶어. super().method(...) 가 부모 버전 호출. 가장 흔한 용도 — 서브클래스 __init__ 안의 super().__init__(...) — 부모가 자기 부분 init 하게 하고 자기 init.
메서드 해석 — 단일 상속 룰
단일 상속의 룰 단순 — Python 이 인스턴스 클래스 체크, 부모, 부모의 부모, ... object 까지. 첫 매치 이김. 다중 상속은 C3 linearization 알고리즘으로 복잡 — 다음 트랙. 지금은 단일 상속이 실세계 대부분 커버.
합성으로 가야 할 때
class Car(Engine): 짜고 있으면 멈춰. car *has-a* engine, *is-an* engine 아님. 맞는 모양 — self.engine = Engine(). 합성은 각 클래스가 한 책임에 집중하게, 교체 쉽게, 단편적 디자인이 만드는 깊은 상속 트리 회피. 현대 Python 스타일이 강하게 합성 선호.
원칙: "상속보다 합성." 상속은 관계가 진짜 "is-a" *그리고* 부모 동작을 확장하고 싶을 때 (모든 거 override 해서 커스터마이즈 X) 맞아. 아니면 — 합성. Pippa 의 어댑터들은 합성, 상속 X — 유일 상속은 streaming API 계약 위한 좁은 ABC.