다중 상속이란?
네, 파이썬(Python)은 다중 상속(Multiple Inheritance)을 지원합니다.
C++와 마찬가지로 파이썬에서도 하나의 클래스가 둘 이상의 부모 클래스(기반 클래스)로부터 동시에 파생될 수 있으며, 이를 다중 상속이라고 합니다.
다중 상속을 사용하면 모든 기반 클래스의 속성과 메서드가 파생 클래스에 그대로 상속됩니다.
상속 기본 예제
먼저 상속의 기본 구조를 살펴보겠습니다. 아래 예제에서 Bird 클래스는 Animal 클래스를 상속합니다.
class Animal:
def eat(self):
print("It eats insects.")
def sleep(self):
print("It sleeps in the night.")
class Bird(Animal):
def fly(self):
print("It flies in the sky.")
def sing(self):
print("It sings a song.")
print(issubclass(Bird, Animal))
Koyal = Bird()
print(isinstance(Koyal, Bird))
Koyal.eat()
Koyal.sleep()
Koyal.fly()
Koyal.sing()
- Animal은 부모 클래스(parent class)로, 슈퍼 클래스(super class) 또는 기반 클래스(base class)라고도 불립니다.
- Bird는 자식 클래스(child class)로, 서브 클래스(sub class) 또는 파생 클래스(derived class)라고도 불립니다.
issubclass() 함수는 Bird가 Animal의 하위 클래스인지 확인하고, isinstance() 함수는 Koyal 객체가 Bird의 인스턴스인지 검사합니다.
실행 결과
True True It eats insects. It sleeps in the night. It flies in the sky. It sings a song.
두 개 이상의 클래스를 상속하는 진짜 다중 상속
위 예제는 하나의 부모만 상속하는 단일 상속(single inheritance)입니다. 여러 클래스를 동시에 상속하는 다중 상속은 괄호 안에 부모 클래스를 쉼표로 나열하여 구현합니다.
class Swimmer:
def swim(self):
print("It swims in the water.")
class Flyer:
def fly(self):
print("It flies in the sky.")
class Duck(Swimmer, Flyer): # 두 개의 클래스를 동시에 상속
def quack(self):
print("It quacks!")
duck = Duck()
duck.swim() # Swimmer에서 상속
duck.fly() # Flyer에서 상속
duck.quack() # Duck 자체의 메서드
실행 결과
It swims in the water. It flies in the sky. It quacks!
MRO(메서드 결정 순서) 알아두기
다중 상속에서는 여러 부모 클래스에 같은 이름의 메서드가 존재할 때 어떤 메서드가 호출될지 결정하는 규칙이 필요합니다. 파이썬은 MRO(Method Resolution Order)를 따르며, 왼쪽에서 오른쪽 순서로 부모 클래스를 탐색합니다. Duck.__mro__를 출력하거나 help(Duck)을 실행하면 실제 탐색 순서를 확인할 수 있습니다.