> 백엔드 개발 > 파이썬 튜토리얼 > Python 상속과 다중 상속에 대한 간략한 설명(코드 예제)

Python 상속과 다중 상속에 대한 간략한 설명(코드 예제)

不言
풀어 주다: 2018-09-12 17:53:17
원래의
2117명이 탐색했습니다.

이 글은 Python 상속과 다중 상속에 대한 간단한 설명(코드 예제)입니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

다음 사항을 기억하세요.

기본 제공 유형(예: dict, list 또는 str)을 직접 서브클래싱하는 것은 오류가 발생하기 쉽습니다. 왜냐하면 내장 유형의 메서드는 일반적으로 사용자가 재정의한 메서드를 무시하기 때문입니다. , 사용자 정의 클래스는 컬렉션 모듈을 상속해야 합니다.

    def __setitem__(self, key, value):
        super().__setitem__(key, [value] * 2) # 错误案例
class AnswerDict(dict):
    def __getitem__(self, item): # 错误案例
        return 42
import collections
class DoppelDict2(collections.UserDict): # 正确案例
    def __setitem__(self, key, value):
        super().__setitem__(key, [value] * 2)
class AnswerDict2(collections.UserDict): # 正确案例
    def __getitem__(self, item):
        return 42
로그인 후 복사

다중 상속과 관련된 또 다른 문제는 다음과 같습니다. 동일한 수준의 슈퍼클래스가 동일한 이름의 속성을 정의하는 경우 Python은 어떤 메소드를 사용할지 어떻게 결정합니까? 메소드

>> D.mro()

[, <클래스 '__main__.B'>, , , ]
메소드 호출을 슈퍼 클래스에 위임하려는 경우 권장되는 방법은 내장된 클래스를 사용하는 것입니다. super() 함수에서 .

다음은 d.pingpong() 메서드

>>> self.ping()

Ping의 해석입니다. <__main__.D object at 0x000002213877F2B0> : <__main__.D object at 0x000002213877F2B0> 첫 번째 호출은 클래스 D의 ping 메서드를 실행하는 self.ping()입니다.

두 번째 호출은 클래스 D의 ping 메서드를 건너뛰는 super().ping()입니다. . , 클래스 A의 ping 메서드를 찾습니다. Ping: <__main__.D object at 0x000002213877F2B0>

세 번째 호출은 self.pong() 메서드입니다. __mro__에 따르면 클래스 B에서 구현된 pong 메서드를 찾습니다. < 0x000002213877F2B0의 __main__.D 객체>

네 번째 호출은 super().pong()이며, 이는 또한 __mro__를 기반으로 클래스 B에 의해 구현된 pong 메서드를 찾습니다: <0x000002213877F2B0의 __main__.D 객체>

다섯번째 첫 번째 호출은 C.pong(self)이며, __mro__를 무시하고 C 클래스에 의해 구현된 pong 메서드를 찾습니다. PONG: <0x000002213877F2B0의 __main__.D 객체>

관련 권장 사항:

Python의 단일 상속 그리고 다중 상속


파이썬 클래스와 상속에 대한 설명

위 내용은 Python 상속과 다중 상속에 대한 간략한 설명(코드 예제)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿