Python類的繼承與多態詳細介紹
概念
類(Class): 用來描述具有相同的屬性和方法的對象的集合。
類變量:類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作為實例變量使用。
類有一個名為 __init__() 的特殊方法(構造方法),該方法在類實例化時會自動調用
self:self 代表的是類的實例,代表當前對象的地址,而 self.class 則指向類。
類調用 Car.weight
實例化 car01=Car(5)
實例對象調用 car01.weght
類的創建
#創建小汽車類和客車類 class Car(object): def __init__(self,weight): #實例化對象時傳入特有屬性 self.weight=weight print("小汽車") print(weight,"t") #定義類內方法,功能是打印出實例化的小汽車的重量 def func(self): print("小汽車的駕駛方法") class Passenger_car(object): def __init__(self,weight): self.weight=weight print("客車") print(weight,"t") def func(self): print("客車的駕駛方法")
類的繼承
我們在構造類時,Python3默認我們繼承瞭object這個基類,我個人理解object就是個空的類,可以不用管為何要在括號中寫上object,這是Python3的特性,在python2中如果你沒有寫object的話不會默認繼承瞭object這個基類。
同樣的我們自己希望繼承的父類隻需要把objetc改為我們自己定義的類名即可。子類中可以擁有父類中所有的公有屬性和方法,但是可以通過在變量名前加下劃線使其變為私有,這樣子類就不可以訪問父類中的成員瞭。
class Bus028(Passenger_car): def __init__(self,weight): #對基類方法的重寫 self.weight=weight print("28路公交車") print(weight,"t") def func(self): #對基類方法的重寫 print("28路公交車的駕駛方法") #子類在父類中繼承過來瞭func方法,但是在父類中修改瞭原來方法的內容
多態的使用
以下三個公交車類的父類均為客車類,我們可以寫一個funcs方法使得每次調用funcs方法時,傳入不同的對象以執行不同的func方法,具體實現如下:
class Bus028(Passenger_car): def __init__(self,weight): self.weight=weight print("28路公交車") print(weight,"t") def func(self): print("28路公交車的駕駛方法") class Bus906(Passenger_car): def __init__(self,weight): self.weight=weight print("906路公交車") print(weight,"t") def func(self): print("906路公交車的駕駛方法") class BusB32(Passenger_car): def __init__(self,weight): self.weight=weight print("B32路公交車") print(weight,"t") def func(self): print("B32路公交車的駕駛方法") def funcs(obj): #此處obj表示傳入一個實例化對象 obj.func()
主函數:
from demo01 import * def main(): car01=Car(5) #例化為帶有重量為5t的一個具體對象 car01.func() passenger_car01=Passenger_car(20) #例化為帶有重量為20t的一個具體對象 passenger_car01.func() bus028_01=Bus028(15) #例化為帶有重量為15t的一個具體對象 bus906_01=Bus906(15) #例化為帶有重量為15t的一個具體對象 busB32_01=BusB32(15) #例化為帶有重量為15t的一個具體對象 funcs(bus028_01) #調用funcs方法 funcs(bus906_01) funcs(busB32_01) if __name__=="__main__": main()
可以看到,我將小汽車實例化為帶有重量為5t的一個具體對象,將客車實例化為帶有重量為20t的一個具體對象,將三個公交車實例化為帶有重量為15t的一個具體對象.
如上圖所示,我每次在調用funcs方法時都傳入瞭一個實例化對象,funcs根據不同的對象執行相應的內部方法。
註:(我習慣上將方法讀作函數,在以後的文章中,方法一律被函數代替)
到此這篇關於Python類的繼承與多態詳細介紹的文章就介紹到這瞭,更多相關Python繼承與多態內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python中super()函數的理解與基本使用
- python 特殊屬性及方法詳細解析
- Python 面向切面編程 AOP 及裝飾器
- python super()函數的詳解
- 淺談Python類的單繼承相關知識