이 글은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!