이 글은 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()[
메소드 호출을 슈퍼 클래스에 위임하려는 경우 권장되는 방법은 내장된 클래스를 사용하는 것입니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!