您好,登錄后才能下訂單哦!
什么是Python對象的繼承?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
淺談python的對象的三大特性之繼承
前面我們定義了人的類,并用這個類實例化出兩個人jack和lily,查看了它們的內存空間。
現在我們再來看看類中所存在的對向對象編程的三大特性之繼承的一些特性。
前面定義了一個人的類,可是我們還知道,人都有屬于自己的職業,比如說老師類,醫生類,警察類等。
我們可以為每個職業都定義一個類,按照前面的定義,我們可以使用下面的代碼來實現。
定義一個老師類:
class Teacher: def __init__(self,name,age,sex,course): self.name=name self.age=age self.sex=sex self.course=course def walk(self): print("%s is walking slow"%self.name) def teach(self): print("%s is teaching"%self.name)
定義一個學生類:
class Student: def __init__(self,name,age,sex,group): self.name=name self.age=age self.sex=sex self.group=group def walk(self): print("%s is walking slow"%self.name) def study(self): print("%s is studying hard"%self.name)
我們可以看到teacher和student類中,有很多重復的代碼。它們都有人類所共有的name,age,sex等特征,以及有人類有的walk這個技能,那么我們就可以把人類共有的name,age,sex特征和walk技能抽離出來,生成一個人的類,然后用老師和學生的類來繼承人的類的這些特征和技能,這樣可以避免寫重復的代碼。
繼承關系是子類繼承父類,是類與類之間的關系
解決代碼重用的問題,減少代碼冗余,這就是我們說的類的三大特征之一的繼承。
把兩個或多個類中的共同點抽離出來,生成一個新的類,也就是被繼承的類,我們稱之為父類 把從父類中繼承特征和技能的類稱為子類或基類
具體實現代碼如下:
我們先把老師和學生中所重復的代碼抽離出來,生成一個人類:
class Person: def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def walk(self): print("%s is walking slow"%self.name)
然后定義一個老師類,來繼承人的類的一個特征和技能:
class Teacher(Person): def __init__(self, name, age, sex, course): Person.__init__(self, name, age, sex) self.course = course def teach(self): print("%s is teaching" % self.name)
最后,再定義一個學生類,來繼承人的類的一些特征和技能:
class Student(Person): def __init__(self, name, age, sex,group): Person.__init__(self, name, age, sex) self.group = group def study(self): print("%s is studying hard" % self.name)
類定義好了,在通過把類實例化生成一個學生和一個老師
t1=Teacher("Jack",18,"male","python") s1=Student("Tom",28,"female","group1")
就可以調用s1或t1的特征和技能了。
比如,我想知道學生的姓名和老師的年齡,就可以這樣做:
print(t1.age,s1.name)
輸出結果為:
18 Tom
調用老師t1的走路的技能:
t1.walk()
輸出為:
Jack is walking slow
調用老師t1的教書的技能:
t1.teach()
輸出為:
Jack is teaching
調用學生s1的走路的技能:
s1.walk()
輸出為:
Tom is walking slow
調用學生s1學習的技能:
s1.study()
輸出為:
Tom is studying hard
我們還可以使用下面的語句來查看子類Student所繼承的父類的名稱:
print(Student.__bases__)
得到結果如下:
(<class '__main__.Person'>,)
同樣的,打印子類Teacher的父類也會得到同樣的結果,顯示其父類為Person.
在上面的輸出中,可以看到輸出結果是一個元組。這樣的話,一個子類就可以繼承多個父類了。
查看子類的父類得到的結果是前面定義的Person類,那我們查看Person的類的話,會得到什么樣的結果呢?
print(Person.__bases__)
輸出為:
(<class 'object'>,)
其結果也是一個元組,但是這里出現了一個object,那么這個object又是什么東東?
事實上,在python3中,所有的類默認都繼承object類。
在python中:
凡是繼承了object類的子類,以及該子類的子類都被為新式類;
沒有繼承object類的子類稱為經典類.
所以python3中,所有的類都是新式類。
而在python2中,沒有繼承object的類,以及它的子類,通常稱為經典類。
來看幾個例子:
這幾個例子,都是在python2的解釋器中運行的:
>>> class Foo: ... pass ... >>> Foo.__bases__ () >>> class Bar(object): ... pass ... >>> Bar.__bases__ (<type 'object'>,)
可以看到,Foo這個類是一個經典類,而定義的第二個Bar類則是一個新式類。
在定義老師和學生類的時候,在類的名字后面要加上被繼承的類Person的名字,以告訴python解釋器,這里調用了類的繼承的特性。
關于什么是Python對象的繼承問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。