이번에는 Flyable 클래스의 생성자가 호출되는 것을 볼 수 있습니다. 즉, 다중 상속을 받은 클래스에서 super()로 부모 클래스에 접근할 때는 순서상 가장 먼저 상속받은 클래스에 접근하게 됩니다. 그러므로 다중 상속을 할 때 모든 부모 클래스의 생성자를 호출하려면 super()를 사용하지 않고 다음과 같이 각 부모 클래스의 이름을 명시해서 접근해야 합니다.
super.py
# class FlyableUnit(Unit, Flyable):
class FlyableUnit(Flyable, Unit):
def __init__(self):
# super().__init__()
Unit.__init__(self) # Unit 클래스 생성자 호출
Flyable.__init__(self) # Flyable 클래스 생성자 호출
실행결과 |
Unit 생성자 Flyable 생성자 |
실행해 보면 부모 클래스의 생성자를 모두 호출하는 것을 확인할 수 있습니다. 최종 코드는 다음과 같습니다.
super.py
class Unit:
def __init__(self):
print("Unit 생성자")
class Flyable:
def __init__(self):
print("Flyable 생성자")
class FlyableUnit(Flyable, Unit): # 상속 순서 변경
def __init__(self):
Unit.__init__(self) # Unit 클래스 생성자 호출
Flyable.__init__(self) # Flyable 클래스 생성자 호출
# 수송선
troopship = FlyableUnit()