1. 程式人生 > >PYTHON3中 類的繼承

PYTHON3中 類的繼承

bsp core def 類別 %s 都是 Go 創建 idt

繼承

1:什麽是繼承

繼承是一種創建新類的方式,在python中,新建的類可以繼承一個或多個父類,也就是說在python中支持一個兒子繼承多個爹。

新建的類成為子類或者派生類。

父類又可以成為基類或者超類。

子類會遺傳父類的屬性。

2:為什麽要用繼承

減少代碼冗余(也就是重復寫代碼)。

3:怎麽用繼承:

我們定義兩個類;
class parenclass1:
        pass

class parenclass2:
        pass


在定義兩個類:

class subclass1:

    pass

class subclass2:
    pass

我想讓 :
class parenclass1: 作為 class subclass1: 的父類。 pass pass

應該這樣用: class subclass1( parenclass1): 這就表示subclass1是子類,parenclass 是subclass1 的父類 pass
兩個父類的話怎麽表達呢?如下:
class subclass2(parenclass1,parenclass2): pass 這就表示subclass2的父類是parenclass1,parenclass2 這兩個

想要查看子類的父類 應該怎樣查看呢: 用__bases__ 如下:

class ParentClass1:
    pass

class ParentClass2:
    pass

class Subclass1(ParentClass1):
    pass

class Subclass2(ParentClass1,ParentClass2):
    pass


print(Subclass1.__bases__) 
#打印結果:(<class __main__.ParentClass1>,)

print(Subclass2.__bases__)
#打印結果:
(
<class __main__.ParentClass1>, <class __main__.ParentClass2>)

經典類與新式類

1、只有在python2中才分新式類和經典類,python3中統一都是新式類
2、在python2中 沒有顯示繼承的object類的類,以及該類的子類都是經典類
3、在python2中,顯示的聲明繼承object的類,以及該類的子類都是新式類
4、在python3中,無論是否繼承object,都默認 繼承object,即python3中所有類均為新式類

至於經典類 與新式類的區別,後面會有討論。

提示:如果沒有指定基類, python的類會默認繼承object類, object是所有python類的基類。

二、繼承與抽象

繼承描述的是子類與父類之間的關系,是一種什麽的關系呢? 要找出這種關系, 必須先抽象在繼承。

抽象即抽取類似或者說比較像的部分。

抽象分成兩個層次:

1.將奧巴馬和梅西這倆對象比較像的部分抽取成類;

2.將人,豬,狗這三個類比較像的部分抽取成父類。

抽象最主要的作用是劃分類別(可以隔離關註點,降低復雜度)

技術分享圖片

繼承:是基於抽象的結果,通過編程語言去實現它,肯定是先經歷抽象合格過程, 才能通過繼承的方式去表達抽象的結構。

抽象只是分析和設計的過程,一個動作或者說一種技巧,通過抽象可以得到類

技術分享圖片

例如:我們寫一個老男孩的老師與學生的類,若是不涉及到繼承的話 我們正常是這樣寫

class OldboyTeacher:
    school = oldboy

    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    def change_score(self):
        print(teacher %s is changing score  %self.name)

class Oldboystudent:
    school = ‘oldboy’
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    def choose(self):
        print(student %s choose course %self.name)

tea1 = OldboyTeacher(egon, 18, male) #OldboyTeacher.__init__(...)
stu1=Oldboystudent(alex,73,female)

print(tea1.name,tea1.age,tea1.sex) # egon 18 male

print(stu1.name) #alex

但是我們經過分析 發現裏面裏面有許多重復代碼, 這時我們可以用到類的繼承來寫了。如下:

class OldboyPeople:
    school =oldboy

    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

class Oldboyteacher(OldboyPeople):
    def change_score(self):
        print(teacher %s is changing score  %self.name)
class Oldboystudent(OldboyPeople): def choose(self): print(student %s choose course%self.name) tea1 = Oldboyteacher(egon, 18, male) stu1=Oldboystudent(alex,73,female)
print(tea1.name,tea1.age,tea1.sex)#egon
18 male print(stu1.name) #alex

PYTHON3中 類的繼承