파이썬의 객체 지향 기준 (상속과 파생, 클래식과 새로운 클래스)

7.2 상속 도출

7.21 상속

1. 무엇을 상속? 상속은 서브 클래스는 파이썬에서 둘 이상의 상위 클래스를 지원 상속 방식의 새로운 종류이다. 새로운 클래스는 부모 클래스는 기본 클래스를 호출 할 수 있습니다 또는 슈퍼 클래스는 서브 클래스 "유전"부모 클래스 속성, 서브 클래스 또는 파생 클래스라고합니다.


2, 왜 상속해야 코드 중복을 줄일 수

클래스 ParentClass1 :
     패스 
클래스 ParentClass2 :
     패스 
클래스 Subclass1 (ParentClass1)
     통과 
클래스 Subclass2 (ParentClass1, ParentClass2)
     패스 
인쇄 (. Subclass1 __bases__ )   # (< '. __ ParentClass1 __main'클래스>) 
인쇄 (Subclass2. __bases__ )   # ( < '__. ParentClass1 __main'클래스> <클래스 '__main __. ParentClass2'>)

3, 클래스와 클래스 상속 관계는 추상을 다시 상속 할 필요가이 관계를 찾을 수 있습니다

클래스 OldboyPeople : 
    학교 = ' 올드 보이 ' 데프 __init__ (자기, 이름, 나이, 성별) : 
        self.name = 이름 
        self.age = 나이 
        self.sex = 클래스 OldboyTeacher (OldboyPeople) :           # 继承OldboyPeople类데프 change_score ( 자기) :
         인쇄 ( ' 교사 % s이 (가) 점수 변화 ' %의 ) self.name 클래스 Oldboystudent (OldboyPeople) :           # 继承OldboyPeople类
     

    

    DEF : (자동)을 선택
         인쇄 ( ' %의 코스를 선택 학생을 ' %의 self.name) 
TEA1 = OldboyTeacher ( ' 에곤을 ' , 18, ' 남성 ' ) # 相当于OldboyTeacher .__의 init __ (...) 
stu1 = Oldboystudent ( ' 알렉스 ' , 73 ' 여성 ' ) 
인쇄 (tea1.name, tea1.age, tea1.sex)           #의 에곤 남성 18 
인쇄 (stu1.name, stu1.age, stu1.sex)           # 알렉스 73 여성

7.22 파생

파생 : 새로운 속성의 자신의 서브 클래스를 정의하면 자신의 서브 클래스에 따라 부모 같은 이름의 클래스와,

클래스 OldboyPeople : 
    학교 = ' 올드 보이 ' 
    데프  __init__ : (자기, 이름, 나이, 성별) 
        self.name = 이름 
        self.age = 나이 
        self.sex = 섹스
     데프 F1 (자기) :
         인쇄 ( ' 爹的F1 ' )
 클래스 OldboyTeacher (OldboyPeople) :
     데프  __init__ (자기, 이름, 나이, 성별, 수준, 급여) : 
        self.name = 이름 
        self.age = 나이 
        self.sex =섹스 
        self.level = 레벨 
        self.salary = 급여
     DEF의 change_score (자기) :
         인쇄 ( ' 교사가 점수를 변화 % S ' % self.name)
     DEF F1 (자동) :
         인쇄 ( ' 아들'F1 ' ) 
TEA1 = OldboyTeacher ( ' 에곤 ' , 18 인 ' MALE ' , 9,3.1)              # 1 수신 ZE 부모가 주어진 경우, 파라미터 여섯 통과 
인쇄 (tea1.name, tea1.age, tea1.sex, tea1.level, tea1.salary)    # 에곤 9 3.1 18 MALE

서브 클래스에 도시 된 방법에서 7.23 재사용 능력 새로운 상위 클래스

한 가지 방법 : 호출 이름 (기준 및 할 상속 아무것도 )

클래스 OldboyPeople : 
    학교 = ' 올드 보이 ' 
    데프  __init__ : (자기, 이름, 나이, 성별) 
        self.name = 이름 
        self.age = 나이 
        self.sex = 
        
클래스 OldboyTeacher (OldboyPeople) :     # 可有可无
    데프  __init__ (자기 이름, 나이, 성별, 수준, 급여) :
         #의 self.name = 이름 
        #의 self.age = 연령 
        # self.sex = 섹스 
        OldboyPeople. __init__ (자기, 이름, 연령, 성별) #OldboyPeople __init__ 방식으로 함께 부모 클래스의 함수 호출을 재사용 
        self.level = 레벨 
        self.salary = 급여 
TEA1 = OldboyTeacher ( ' 에곤 ' , 18이며, ' MALE ' . 9, 3.1 )
 인쇄 (tea1.name, tea1.age , tea1.sex, tea1.level, tea1.salary) # 에곤 9 3.1 18 MALE

두 번째 방법 : 슈퍼 () 호출 ( 상속에 엄격하게 의존 )

슈퍼 () 반환 값이 특히 상위 클래스의 속성을 호출하는 특별한 목적은, 슈퍼 () 찾기 위해 현재 위치에서 목록을 찾기 MRO 엄격한에 따라 미래에 계속

알아보기 : python2에서, 당신은 슈퍼 필요 (자신의 클래스의 이름을 자기)

클래스 OldboyPeople : 
    학교 = ' 올드 보이 ' 
    데프  __init__ (자기, 이름, 나이, 성별) : 
        self.name = 이름 
        self.age = 나이 
        self.sex = 
클래스 OldboyTeacher (OldboyPeople) :       # 必须有父类
    데프  __init__ ( 자기 이름, 나이, 성별, 수준, 급여) : 
        슈퍼 (OldboyTeacher, 자기). __init__ (이름, 나이, 성별) # OldboyPeople .__의 init __ (자기, 이름, 나이, 성별) 
        self.level = 레벨 
        self.salary= 급여 
TEA1 = OldboyTeacher ( ' 에곤 ' , 18 ' 남성 ' , 9, 3.1 )
 인쇄 (tea1.name, tea1.age, tea1.sex, tea1.level, tea1.salary)    #의 에곤 남성 18 9 3.1

7.3 클래식과 새로운 클래스

1, 새로운 클래스 : 상속 된 개체 클래스와 클래스의 서브 클래스는, 새 클래스입니다

부모 클래스를 상속하지 않는 클래스가 지정된 경우 python3에서, 기본은 모든 클래스가 python3 새로운 클래스입니다 그래서 개체를 상속합니다

(2), 클래식 (단지 클래식과 새로운 스타일의 클래스 사이의 유일한 차이 python2에) : 상속 된 객체 클래스와 클래스의 하위 클래스가 없다, 고전 클래스입니다

클래스 푸 () :                # 在의 python3의中의 
    패스 클래스 바 (푸) :
     패스 인쇄 (. 푸 __bases__ )         # (<클래스의 객체>) 인쇄 (. 바 __bases__ )         # (<클래스 '__main__.Foo' >)


다중 상속 배경에서 7.34 찾기 등록

속성 찾기 OBJ를. X를 . 1 , OBJ를 시작합니다. __dict__ 2 , 클래스 개체를. __dict__을 . 3 , 상위 클래스. __dict__을    ..........
   
   
   
   

상속 관계는 지점 B, C를 찾아 처음에 따라야 다음 분기, D는 마침내 우리가 원하는 속성을 찾기까지이 순서의 지점을 발견 것을 발견 할 것이다 비 다이아몬드 구조 인 경우

깊이 우선과 폭 우선 : 상속은 다이아몬드 모양의 구조 인 경우, 특성, 즉를 찾을 수있는 방법은 두 가지가 있습니다

인쇄 ( F.의 __mro__) # F.mro () #은 선형 목록을 볼 수 있습니다 재산이 새로운 클래스가, 속성이 속성없이, 클래식을 위해 검색 뷰

추천

출처www.cnblogs.com/mylu/p/11129362.html