회원가입

12. [상속] 다중 상속

NULL 2021-10-12

파이썬에서는 하나의 자식 클래스가 여러 부모 클래스상속받는 것도 가능하다.

이것을 다중 상속 이라고 한다.

 

아래 예시를 통해 보자.

# 엔지니어 클래스
class Engineer:
    def __init__(self, favorite_language):
        self.favorite_language = favorite_language

    def program(self):
        print(f"{self.favorite_language}(으)로 프로그래밍한다.")

# 테니스 선수 클래스
class TennisPlayer:
    def __init__(self, tennis_level):
        self.tennis_level = tennis_level

    def play_tennis(self):
        print(f"{self.tennis_level} 반에서 테니스를 칩니다.")

captain = Engineer("자바스크립트")
yoonsoo = TennisPlayer("고급")

# 각 클래스가 잘 작동하는지 확인
captain.program()
yoonsoo.play_tennis()
자바스크립트(으)로 프로그래밍한다.
고급 반에서 테니스를 칩니다.

 

여기서 한 가지 가정을 해보자.

Engineer 이면서 동시에 TennisPlayer 인 사람이 있다고 하자.

이 사람을 나타낼 때, 다중 상속 을 이용하면 된다.

 

이 말은 Engineer 클래스와 TennisPlayer 를 둘 다 상속 받는 자식 클래스를 만들면 된다는 뜻이다.

 

자식 클래스를 만들어보자.

자식 클래스의 이름은 EngineerTennisPlayer 라고 하자.

class EngineerTennisPlayer(Engineer, TennisPlayer):
    def __init__(self, favorite_language, tennis_level):
        super()....???

이때 다중 상속의 단점이 나온다.

어떤 super 를 사용했을 때, 어느 부모 클래스를 말하는지 알 수 없다는 것이다.

일단은 부모 클래스의 클래스 명을 사용하여 접근하자.

class EngineerTennisPlayer(Engineer, TennisPlayer):
    def __init__(self, favorite_language, tennis_level):
        Engineer.__init__(self, favorite_language)
        TennisPlayer.__init__(self, tennis_level)

# 다중 상속을 받는 클래스의 인스턴스 생성
younghoon = EngineerTennisPlayer("파이썬", "초급")

# 두 부모 클래스의 메서드들을 잘 물려받았는지 확인
younghoon.program()
younghoon.play_tennis()
파이썬(으)로 프로그래밍한다.
초급 반에서 테니스를 칩니다.

 

잘 실행 되는 것이 보인다.

0 0