PYTHON-面向對象 繼承 派生

1. 什麼是繼承    繼承是一種新建類的方式,新建的類稱之爲子類/派生類,被繼承的類稱之爲父類/基類/超類    繼承有3個特色:        1. 子類能夠遺傳/重用父類的屬性(解決類與類之間代碼冗餘的問題)        2. 在python中一個子類能夠同時繼承多個父類        3. 在繼承的背景下,類分爲兩種:新式類,經典類            新式類:但凡繼承object類的子類,以及該子類的子子孫孫都是新式類                在python3中一個類即使是沒有顯式地繼承任何類,默認就繼承object類,                即在python3中全部類都是新式類            經典類:沒有繼承object類的子類,以及該子類的子子孫孫都是經典類                強調:只有在python2中才有經典類                在python2中若是一個類沒有顯式地繼承任何類,並不會自動繼承object類2. 爲什麼要用繼承:減小類與類之間的代碼冗餘3. 如何繼承 :先抽象再繼承# 在python中繼承的特色?單繼承(用一個父類)&多繼承(用多個父類)x = 2class Foo:    x = 1    passobj = Foo()obj.x = 3print(obj.x)4. 屬性查找    在沒有出現菱形繼承的狀況下,屬性的查找是按照從左往右的順序一個分支一個分支的找下去    在單繼承背景下,不管是新式類仍是經典類屬性查找順序都同樣    先obj->類->父類->...    在出現菱形繼承(一個子類繼承的多個分支最終匯聚到一個非object類)的狀況下,    在多繼承背景下,若是一個子類繼承了多個分支,可是多個分支最終匯聚到一個非object類(菱形繼承問題)        面試常問問題*****        新式類(.mro()):廣度優先查找,按照從左往右的順序一個分支一個分支的找下去,在最後一個分支纔去查找頂級類                obj->A->B->E->C->F->D->G->object        經典類:深度優先查找,按照從左往右的順序一個分支一個分支的找下去,在第一個分支就查找頂級類                obj->A->B->E->G->C->F->D5. 派生    在子類中定義本身的屬性,若是與父類的屬性重名,那以本身的爲準.    在子類派生的新方法中重用父類的功能:        方式一:指名道姓地調用某一個類的函數            特色:                1. 與繼承無關                2. 沒有自動傳值的效果class OldboyPerson:#父類    school="oldboy"    def __init__(self,name,age,gender):        self.name=name        self.age=age        self.gender=genderclass Teacher(OldboyPerson):#子類    def __init__(self,name,age,gender,level,salary):        OldboyPerson.__init__(self,name,age,gender)        self.level = level        self.salary = salary        方式二:super()獲得一個特殊的對象,該對象專門用來引用父類的屬性            特色:                1. 嚴格依賴繼承,super會徹底參照類的mro列表依次查找屬性                2. 有自動傳值的效果        方式一種的:OldboyPerson.__init__(self,name,age,gender)        替換爲:super(Teacher, self).__init__(name,age,gender)
相關文章
相關標籤/搜索