파이썬 다중상속

cokemania·2022년 9월 19일
0
post-thumbnail

파이썬은 하나 이상의 클래스를 상속받을 수 있다.


class A1():
    def print_a(self):
        print("A1")

class A2():
    def print_a2(self):
				print("A2")

class B2(A1, A2):
    pass

b = B2()
# 둘 다 사용가능
b.print_a()
b.print_a2()

둘 뿐만이 아니라 더 많은 클래스를 상속할 수 있는데,

만약 클래스 상속이 더 복잡해질 경우

class A1():
    def __init__(self):
        print("A1")

class A2():
    def __init__(self):
        print("A2")

class B2(A1, A2):
    def __init__(self):
        print("B2")

b = B2()

위와 같이 사용하는 함수가 겹칠 우려가 있다.

기본 1:1 상속에서는 부모 클래스의 메서드를 사용하기 위해서는 super()를 통해서 부모 함수의 메서드를 부르면 되지만 만약 다중상속일 경우엔 B2 메서드에서 super()를 호출하면 어떤 클래스가 불러지게 될까?

상속한 클래스중 가장 먼저 적은 A1의 메서드를 호출하게 된다.

이 순서는 클래스의 스페셜 메서드인 mro() (Method Resolution Order)로 확인이 가능하다.

>>> B2.mro()
<class '__main__.B2'>, <class '__main__.A1'>, <class '__main__.A2'>, <class 'object'>]

만약 이럴때 super()로 A1이 아닌 A2를 호출하고 싶다면 B2에서 A2.__init__(self)를 작성해주면 된다.

0개의 댓글