super()
와 다중 상속 이해하기다중 상속을 사용하면 여러 부모 클래스로부터 기능을 상속받을 수 있는데, 이때 super()
는 상속 순서를 조정하는 중요한 역할을 합니다. 오늘은 super()
의 사용법과 다중 상속에서 모든 부모 클래스를 초기화하는 방법에 대해 알아보겠습니다.
다중 상속은 하나의 클래스가 여러 부모 클래스로부터 속성과 메서드를 상속받는 것을 말합니다. 예를 들어 아래 코드에서 FlyableUnit
클래스는 Unit
과 Flyable
두 개의 부모 클래스를 상속받습니다.
class Unit:
def __init__(self):
print("Unit 생성자")
class Flyable:
def __init__(self):
print("Flyable 생성자")
class FlyableUnit(Unit, Flyable):
def __init__(self):
super().__init__() # Unit의 생성자만 호출됨
# 객체 생성
dropship = FlyableUnit() # 출력: Unit 생성자
super().__init__()
을 사용하면 상속 순서에 따라 첫 번째 부모 클래스인 Unit
의 생성자만 호출됩니다.Flyable
의 생성자는 어떻게 호출할 수 있을까요?super()
대신 모든 부모 클래스 초기화하기모든 부모 클래스의 생성자를 호출하고 싶다면, super()
대신 각각의 부모 클래스를 명시적으로 호출해야 합니다.
class Unit:
def __init__(self):
print("Unit 생성자")
class Flyable:
def __init__(self):
print("Flyable 생성자")
class FlyableUnit(Unit, Flyable):
def __init__(self):
Unit.__init__(self) # 명시적으로 호출
Flyable.__init__(self) # 두 번째 부모 클래스도 명시적으로 호출
# 객체 생성
dropship = FlyableUnit()
# 출력:
# Unit 생성자
# Flyable 생성자
super()
는 첫 번째 부모 클래스만 호출되지만, 위 방식으로는 모든 부모 클래스의 생성자를 호출할 수 있습니다.super()
를 사용하는 이유는?super()
를 사용하면 코드가 더 간결하고 유지 보수가 쉬워집니다. 하지만 모든 부모 클래스를 초기화해야 하는 경우에는 명시적으로 부모 클래스의 생성자를 호출하는 것이 좋습니다.
super()
와 다중 상속의 관계를 잘 이해하면 더 효율적으로 코드를 작성할 수 있습니다. 파이썬의 다중 상속을 이용한 객체지향 프로그래밍에서 주의해야 할 점들을 이번에 잘 살펴봤습니다. 다중 상속을 사용할 때는 상속 순서와 super()
의 역할을 꼭 이해하고 사용해야 합니다.