Python super()와 다중상속

2star_·2024년 10월 6일
0

Python

목록 보기
7/13

Python super()와 다중 상속 이해하기

다중 상속을 사용하면 여러 부모 클래스로부터 기능을 상속받을 수 있는데, 이때 super()는 상속 순서를 조정하는 중요한 역할을 합니다. 오늘은 super()의 사용법과 다중 상속에서 모든 부모 클래스를 초기화하는 방법에 대해 알아보겠습니다.


1. 다중 상속이란?

다중 상속은 하나의 클래스가 여러 부모 클래스로부터 속성과 메서드를 상속받는 것을 말합니다. 예를 들어 아래 코드에서 FlyableUnit 클래스는 UnitFlyable 두 개의 부모 클래스를 상속받습니다.

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의 생성자는 어떻게 호출할 수 있을까요?

2. 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()는 첫 번째 부모 클래스만 호출되지만, 위 방식으로는 모든 부모 클래스의 생성자를 호출할 수 있습니다.

3. 다중 상속에서 super()를 사용하는 이유는?

super()를 사용하면 코드가 더 간결하고 유지 보수가 쉬워집니다. 하지만 모든 부모 클래스를 초기화해야 하는 경우에는 명시적으로 부모 클래스의 생성자를 호출하는 것이 좋습니다.

마무리

super()와 다중 상속의 관계를 잘 이해하면 더 효율적으로 코드를 작성할 수 있습니다. 파이썬의 다중 상속을 이용한 객체지향 프로그래밍에서 주의해야 할 점들을 이번에 잘 살펴봤습니다. 다중 상속을 사용할 때는 상속 순서super()의 역할을 꼭 이해하고 사용해야 합니다.

profile
안녕하세요.

0개의 댓글

관련 채용 정보