>  기사  >  백엔드 개발  >  Python 상속과 다중 상속에 대한 간략한 설명(코드 예제)

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

不言
不言원래의
2018-09-12 17:53:172051검색

이 글은 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()

[f90f74cf2b5eef2157d27f4b07137685, e12767d07bfdb94c45180e53b6d8c818, 3c8ab9bdf9f4838c4d1910062f257eb2, d65e71c32c2035ca4f3e3c46100a7a5f, 0b6b3070adce8118f880cf43f8bc8037]
메소드 호출을 슈퍼 클래스에 위임하려는 경우 권장되는 방법은 내장된 클래스를 사용하는 것입니다. super() 함수에서 .

다음은 d.pingpong() 메서드

>>> self.ping()

Ping의 해석입니다. 51c9255e984783507746d24bd1018f2c : 51c9255e984783507746d24bd1018f2c 첫 번째 호출은 클래스 D의 ping 메서드를 실행하는 self.ping()입니다.

두 번째 호출은 클래스 D의 ping 메서드를 건너뛰는 super().ping()입니다. . , 클래스 A의 ping 메서드를 찾습니다. Ping: 51c9255e984783507746d24bd1018f2c

세 번째 호출은 self.pong() 메서드입니다. __mro__에 따르면 클래스 B에서 구현된 pong 메서드를 찾습니다. d64e8f4874de4188318038dc64f57b52

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

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

관련 권장 사항:

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


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

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

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