Python 다 중 계승 방법 해석 실행 순서 실례 분석

2648 단어 Python다 중 상속
본 고의 실례 는 Python 의 다 중 계승 방법 해석 집행 순 서 를 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
다 중 계승 을 실현 하 는 모든 언어 는 잠재 적 인 명명 충돌 을 처리 해 야 한다.이런 충돌 은 관련 이 없 는 조상 류 가 동명 의 방법 으로 인해 발생 한다.

class A:
  def say(self):
    print("A Hello:", self)
class B(A):
  def eat(self):
    print("B Eating:", self)
class C(A):
  def eat(self):
    print("C Eating:", self)
class D(B, C):
  def say(self):
    super().say()
    print("D Hello:", self)
  def dinner(self):
    self.say()
    super().say()
    self.eat()
    super().eat()
    C.eat(self)

여기 B 와 C 는 모두 eat 방법 을 실현 했다.
D 의 인 스 턴 스 에서 d.eat()방법 을 호출 하면 어떤 eat 방법 을 실행 합 니까?

>>> d = D()
>>> d.eat()
B Eating: <__main__.D object at 0x7fb90c627f60>
>>> C.eat(d)
C Eating: <__main__.D object at 0x7fb90c627f60>

초 클래스 의 방법 은 모두 직접 호출 할 수 있 습 니 다.이 때 인 스 턴 스 를 명시 적 매개 변수 로 전송 해 야 합 니 다.
파 이 썬 은 d.eat()가 호출 하 는 방법 을 구분 할 수 있 습 니 다.파 이 썬 이 특정한 순서에 따라 계승 도 를 옮 겨 다 니 기 때 문 입 니 다.이 순 서 는 방법 해석 순서(Method Resolution Order,MRO)라 고 합 니 다.클래스 는 모두 라 는 이름 이 있 습 니 다.mro__ 의 속성,그 값 은 하나의 원 그룹 입 니 다.방법 해석 순서에 따라 각 초 류 를 표시 합 니 다.현재 클래스 에서 object 류 까지 계속 위로 올 라 갑 니 다.D 류 의mro__ 속성 은 다음 과 같 습 니 다:

>>> D.__mro__
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class 'object'>)
>>> d = D()
>>> d.dinner()
A Hello: <__main__.D object at 0x7fb90bd7eb70>
D Hello: <__main__.D object at 0x7fb90bd7eb70>
A Hello: <__main__.D object at 0x7fb90bd7eb70>
B Eating: <__main__.D object at 0x7fb90bd7eb70>
B Eating: <__main__.D object at 0x7fb90bd7eb70>
C Eating: <__main__.D object at 0x7fb90bd7eb70>

첫 번 째self.say(),A 류 를 실행 하 는say()자신의 두 번 째 줄 정 보 를 인쇄 합 니 다.
두 번 째super().say(),A 류 를 운행 하 는say()세 번 째self.eat(),__mro__ 에 따 르 면 B 류 가 실현 하 는 eat 방법 을 찾 았 다.
네 번 째super().eat(),__mro__ 에 따 르 면 B 류 가 실현 하 는 eat 방법 을 찾 았 다.
다섯 번 째C.eat(self)mro 를 무시 하고 C 류 가 실현 하 는 eat 방법 을 찾 았 습 니 다.
더 많은 파 이 썬 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기