파이썬은 「다중 상속(multiple inheritance)」을 지원합니다.
한 클래스가 여러 부모 클래스에서 동시에 상속받을 수 있다는 뜻입니다.
class Pet(Animal, NamedEntity): pass — Pet은 Animal과 NamedEntity의 모든 능력을 합쳐 가집니다.
다중 상속의 어려움은 「두 부모에 같은 이름의 메서드가 있을 때 어느 것이 호출되는가」입니다.
파이썬은 이를 「MRO(Method Resolution Order, 메서드 결정 순서)」로 풀어냅니다.
ClassName.__mro__로 그 순서를 볼 수 있습니다.
MRO의 알고리즘은 「C3 linearization」으로, 「자기 → 첫 번째 부모 → 두 번째 부모 → 공통 조상」 순서를 자동으로 결정합니다.
직접 보면 복잡하지만 「왼쪽에서 오른쪽으로, 깊이 우선」이 대략적 직관입니다.
다중 상속의 대표 활용은 「믹스인(mixin)」 패턴입니다.
작은 기능을 가진 클래스를 만들어 여러 클래스에 「섞어 넣는」 식.
class LoggerMixin: def log(self, msg): print(f"[LOG] {msg}").
class Service(BaseService, LoggerMixin): pass — Service는 BaseService의 본업에 LoggerMixin의 로그 기능을 더 가집니다.
다중 상속은 강력하지만 복잡해질 수 있어 「합성(composition) 또는 단일 상속 + 믹스인」을 더 권장하는 의견이 많습니다.
「상속이 합성보다 좋다는 신화」를 깨는 책 「Design Patterns」 이후 「Favor composition over inheritance」가 널리 받아들여지는 원칙이 됐습니다.
한 줄 요약
파이썬은 다중 상속을 지원하며 MRO(C3 linearization)로 메서드 결정 순서를 정합니다.
믹스인 패턴이 다중 상속의 대표 활용이지만 합성을 더 권장하는 흐름이 있습니다.
더 알아볼 것
- __mro__로 상속 순서 보기
- 다이아몬드 상속 문제
- Mixin 패턴의 좋은 예와 나쁜 예