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

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

Barbara Streisand
Barbara Streisand원래의
2024-12-20 17:35:20865검색

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

다중 상속이 Python의 super() 동작에 미치는 영향

Python의 다중 상속은 메서드 결정에 복잡성을 가져옵니다. Python은 MRO(메서드 확인 순서)를 결정하여 super()에 의해 호출되어야 하는 상위 메서드를 설정합니다.

귀하의 예에서 Third는 First와 Second 모두에서 상속됩니다. Super().__init__()가 Third.__init__()에서 호출되면 MRO가 부모 클래스를 왼쪽에서 오른쪽으로 평가하기 때문에 First.__init__()를 참조합니다. First는 상속 체인에서 Second보다 먼저 나열됩니다.

Python은 MRO를 구성할 때 상속 목록에서 클래스 순서를 우선시합니다. 따라서 다음 예에서 MRO는 [Fourth, Second, Third, First, object]:

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")

이 시나리오에서 Fourth는 Second.__init__() 대신 First.__init__()를 호출합니다. MRO에서는 First가 가장 먼저 발생하기 때문입니다.

그러나 상속 순서가 다음과 같은 경우 reversed:

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

그런 다음 MRO는 [Third, Second, First, object]가 되고 Third는 처음에 Second.__init__()를 호출합니다.

특히 Python은 일관된 MRO를 시행합니다. . 상속 체인에 불일치가 있는 경우 예상치 못한 동작을 방지하기 위해 예외를 발생시킵니다.

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

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