>백엔드 개발 >파이썬 튜토리얼 >`super()`는 Python 다중 상속에서 메서드 호출을 어떻게 해결합니까?

`super()`는 Python 다중 상속에서 메서드 호출을 어떻게 해결합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-27 10:33:14192검색

How Does `super()` Resolve Method Calls in Python Multiple Inheritance?

Python 다중 상속의 Super()

Python의 다중 상속은 super()가 Super()와 어떻게 상호 작용하는지에 대한 질문을 불러일으킵니다. 다음 코드를 고려해보세요.

class First(object):
    def __init__(self):
        print("first")

class Second(object):
    def __init__(self):
        print("second")

class Third(First, Second):
    def __init__(self):
        super(Third, self).__init__()
        print("that's it")

이제, Third의 어느 상위 메소드가 super().__init__를 참조합니까? 어느 것이 실행되는지 선택할 수 있나요?

이러한 맥락에서 super()를 이해하기 위해 MRO(Method Resolution Order) 개념을 살펴보겠습니다. Python에서 MRO는 다중 상속이 포함될 때 메서드가 해결되는 순서를 정의합니다.

이 예에서 Third()는 First.__init__을 호출합니다. Python은 클래스 부모의 각 속성을 왼쪽에서 오른쪽으로 검사합니다. __init__의 경우 Python은 First를 먼저 찾고, 찾을 수 없으면 Second를 확인합니다.

상속이 얽히면 상황이 더욱 복잡해집니다. 이에 대한 자세한 내용은 MRO에 대한 Guido의 블로그 게시물을 참조하세요. 그러나 Python은 일반적으로 하위 클래스 자체부터 시작하여 작성된 상속 순서를 유지합니다.

다음 예를 고려하세요.

class First(object):
    def __init__(self):
        print("first")

class Second(First):
    def __init__(self):
        print("second")

class Third(First):
    def __init__(self):
        print("third")

class Fourth(Second, Third):
    def __init__(self):
        super(Fourth, self).__init__()
        print("that's it")

여기서 MRO는 [Fourth, Second , Third, First].

Python이 일관된 MRO를 결정할 수 없는 경우 다음을 수행하는 대신 예외를 발생시킨다는 점에 유의하는 것이 중요합니다. 잠재적으로 예상치 못한 동작이 발생할 수 있습니다.

또한 제공된 예제에서는 super() 호출을 사용하지 않는다는 점을 언급할 가치가 있습니다. 이들의 목적은 특정 출력을 인쇄하는 것이 아니라 MRO가 어떻게 구성되는지 보여주는 것입니다. Python의 상속 모델을 더 깊이 이해하려면 super() 호출을 실험해 보는 것이 좋습니다.

위 내용은 `super()`는 Python 다중 상속에서 메서드 호출을 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.