더북(TheBook)

이번에는 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 클래스 생성자 호출

실행결과 icon_con

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()
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.