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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.