Python 다 중 계승 원리 와 용법 예시

1973 단어 Python다 상속
본 논문 의 사례 는 Python 다 중 계승 원리 와 용법 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
python 에서 다 중 계승 을 사용 하면 찾기 순서(MRO),중복 호출(다이아몬드 계승,마름모꼴 계승 문제 라 고도 함)등 과 관련 됩 니 다.
MRO
MRO 는 methodresolution order 로 하위 클래스 가 호출 하 는 속성 이 어느 부모 클래스 에서 왔 는 지 판단 하 는 데 사 용 됩 니 다.Python 2.3 이전에 MRO 는 깊이 우선 알고리즘 을 바탕 으로 2.3 부터 C3 알고리즘 을 사용 하기 시 작 했 고 클래스 를 정의 할 때 object 를 계승 해 야 했다.이런 종 류 를 신식 류 라 고 부 르 지 않 으 면 구식 류 라 고 부른다.
그림 에서 알 수 있 듯 이 구식 클래스 는 속성 을 찾 을 때 깊이 우선 검색 이 고,신식 클래스 는 넓이 우선 검색 이다

C3 알고리즘 은 최초 로 Lisp 에 사 용 된 것 으로 파 이 썬 에 응 용 된 것 은 원래 깊이 우선 검색 알고리즘 을 바탕 으로 로 컬 우선 순위 와 단조 로 운 문 제 를 해결 하기 위해 서 였 다.
로 컬 우선 순위:C(A,B)와 같은 부모 클래스 의 순 서 를 말 합 니 다.C 클래스 의 대상 속성 에 접근 할 때 성명 순서에 따라 A 클래스 를 먼저 찾 은 다음 B 클래스 를 찾 아야 합 니 다.
단조 성:C 의 해석 순서 에서 A 가 B 의 앞 에 있다 면 C 의 모든 하위 클래스 에서 도 이 순 서 를 만족 시 켜 야 합 니 다.
예시
아래 의 예 를 보다

# -*- coding:utf-8 -*-
#!python2
class X(object):
  def f(self):
    print 'x'
class A(X):
  def f(self):
    print 'a'
def extral(self):
    print 'extral a'
class B(X):
  def f(self):
    print 'b'
  def extral(self):
    print 'extral b'
class C(A, B, X):
  def f(self):
    super(C, self).f()
    print 'c'
print C.mro()
c = C()
c.f()
c.extral()

광범 위 한 검색 원칙 에 따라 가장 먼저 A 를 검색 하 였 기 때문에 결 과 는 매우 뚜렷 하 다.아래 와 같다.
[, , , , ]
a
c
extral b
클래스 C 는 extral 함수 가 없고 하위 클래스 의 이 함 수 를 호출 합 니 다.이런 유형의 일부 행 위 는 아버지 류 가 제공 하 는 행 위 를 추상 적 인 초 류 라 고 한다.
Python 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기