Python類(lèi)的繼承與多態(tài)詳細(xì)介紹
概念
類(lèi)(Class): 用來(lái)描述具有相同的屬性和方法的對(duì)象的集合。
類(lèi)變量:類(lèi)變量在整個(gè)實(shí)例化的對(duì)象中是公用的。類(lèi)變量定義在類(lèi)中且在函數(shù)體之外。類(lèi)變量通常不作為實(shí)例變量使用。
類(lèi)有一個(gè)名為 __init__() 的特殊方法(構(gòu)造方法),該方法在類(lèi)實(shí)例化時(shí)會(huì)自動(dòng)調(diào)用
self:self 代表的是類(lèi)的實(shí)例,代表當(dāng)前對(duì)象的地址,而 self.class 則指向類(lèi)。
類(lèi)調(diào)用 Car.weight
實(shí)例化 car01=Car(5)
實(shí)例對(duì)象調(diào)用 car01.weght
類(lèi)的創(chuàng)建
#創(chuàng)建小汽車(chē)類(lèi)和客車(chē)類(lèi) class Car(object): def __init__(self,weight): #實(shí)例化對(duì)象時(shí)傳入特有屬性 self.weight=weight print("小汽車(chē)") print(weight,"t") #定義類(lèi)內(nèi)方法,功能是打印出實(shí)例化的小汽車(chē)的重量 def func(self): print("小汽車(chē)的駕駛方法") class Passenger_car(object): def __init__(self,weight): self.weight=weight print("客車(chē)") print(weight,"t") def func(self): print("客車(chē)的駕駛方法")
類(lèi)的繼承
我們?cè)跇?gòu)造類(lèi)時(shí),Python3默認(rèn)我們繼承了object這個(gè)基類(lèi),我個(gè)人理解object就是個(gè)空的類(lèi),可以不用管為何要在括號(hào)中寫(xiě)上object,這是Python3的特性,在python2中如果你沒(méi)有寫(xiě)object的話(huà)不會(huì)默認(rèn)繼承了object這個(gè)基類(lèi)。
同樣的我們自己希望繼承的父類(lèi)只需要把objetc改為我們自己定義的類(lèi)名即可。子類(lèi)中可以擁有父類(lèi)中所有的公有屬性和方法,但是可以通過(guò)在變量名前加下劃線(xiàn)使其變?yōu)樗接?,這樣子類(lèi)就不可以訪(fǎng)問(wèn)父類(lèi)中的成員了。
class Bus028(Passenger_car): def __init__(self,weight): #對(duì)基類(lèi)方法的重寫(xiě) self.weight=weight print("28路公交車(chē)") print(weight,"t") def func(self): #對(duì)基類(lèi)方法的重寫(xiě) print("28路公交車(chē)的駕駛方法") #子類(lèi)在父類(lèi)中繼承過(guò)來(lái)了func方法,但是在父類(lèi)中修改了原來(lái)方法的內(nèi)容
多態(tài)的使用
以下三個(gè)公交車(chē)類(lèi)的父類(lèi)均為客車(chē)類(lèi),我們可以寫(xiě)一個(gè)funcs方法使得每次調(diào)用funcs方法時(shí),傳入不同的對(duì)象以執(zhí)行不同的func方法,具體實(shí)現(xiàn)如下:
class Bus028(Passenger_car): def __init__(self,weight): self.weight=weight print("28路公交車(chē)") print(weight,"t") def func(self): print("28路公交車(chē)的駕駛方法") class Bus906(Passenger_car): def __init__(self,weight): self.weight=weight print("906路公交車(chē)") print(weight,"t") def func(self): print("906路公交車(chē)的駕駛方法") class BusB32(Passenger_car): def __init__(self,weight): self.weight=weight print("B32路公交車(chē)") print(weight,"t") def func(self): print("B32路公交車(chē)的駕駛方法") def funcs(obj): #此處obj表示傳入一個(gè)實(shí)例化對(duì)象 obj.func()
主函數(shù):
from demo01 import * def main(): car01=Car(5) #例化為帶有重量為5t的一個(gè)具體對(duì)象 car01.func() passenger_car01=Passenger_car(20) #例化為帶有重量為20t的一個(gè)具體對(duì)象 passenger_car01.func() bus028_01=Bus028(15) #例化為帶有重量為15t的一個(gè)具體對(duì)象 bus906_01=Bus906(15) #例化為帶有重量為15t的一個(gè)具體對(duì)象 busB32_01=BusB32(15) #例化為帶有重量為15t的一個(gè)具體對(duì)象 funcs(bus028_01) #調(diào)用funcs方法 funcs(bus906_01) funcs(busB32_01) if __name__=="__main__": main()
可以看到,我將小汽車(chē)實(shí)例化為帶有重量為5t的一個(gè)具體對(duì)象,將客車(chē)實(shí)例化為帶有重量為20t的一個(gè)具體對(duì)象,將三個(gè)公交車(chē)實(shí)例化為帶有重量為15t的一個(gè)具體對(duì)象.
如上圖所示,我每次在調(diào)用funcs方法時(shí)都傳入了一個(gè)實(shí)例化對(duì)象,funcs根據(jù)不同的對(duì)象執(zhí)行相應(yīng)的內(nèi)部方法。
注:(我習(xí)慣上將方法讀作函數(shù),在以后的文章中,方法一律被函數(shù)代替)
到此這篇關(guān)于Python類(lèi)的繼承與多態(tài)詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Python繼承與多態(tài)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python類(lèi)的定義和使用詳情
- Python枚舉類(lèi)定義和使用方法
- python中讓自定義的類(lèi)使用加號(hào)"+"
- Python類(lèi)的定義和使用詳情
- Python自定義指標(biāo)聚類(lèi)實(shí)例代碼
- python基礎(chǔ)之定義類(lèi)和對(duì)象詳解
- python3 實(shí)現(xiàn)自定義切片類(lèi)為左閉右閉詳情
- python中的3種定義類(lèi)方法
- python調(diào)用stitcher類(lèi)自動(dòng)實(shí)現(xiàn)多個(gè)圖像拼接融合功能
- 關(guān)于Python中定制類(lèi)的比較運(yùn)算實(shí)例
- Python類(lèi)的定義繼承調(diào)用比較方法技巧
相關(guān)文章
PySpark中RDD的數(shù)據(jù)輸出問(wèn)題詳解
RDD是 Spark 中最基礎(chǔ)的抽象,它表示了一個(gè)可以并行操作的、不可變得、被分區(qū)了的元素集合,這篇文章主要介紹了PySpark中RDD的數(shù)據(jù)輸出詳解,需要的朋友可以參考下2023-01-01python使用websocket庫(kù)發(fā)送WSS請(qǐng)求
WebSocket是一種在客戶(hù)端和服務(wù)器之間進(jìn)行雙向通信的協(xié)議,Python中有許多WebSocket庫(kù)可供選擇,其中一個(gè)常用的是websocket庫(kù),使用該庫(kù)可以輕松地發(fā)送WSS請(qǐng)求,需要的朋友可以參考下2023-10-10python實(shí)現(xiàn)登陸知乎獲得個(gè)人收藏并保存為word文件
這篇文章主要介紹了python實(shí)現(xiàn)登陸知乎獲得個(gè)人收藏并保存為word文件,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-03-03精心整理總結(jié)的Python自動(dòng)化測(cè)試面試題
簡(jiǎn)單來(lái)說(shuō),自動(dòng)化測(cè)試框架包含了所有的測(cè)試工作所需的測(cè)試框架,下面這篇文章主要給大家介紹了關(guān)于Python自動(dòng)化測(cè)試面試題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02Python Metaclass原理與實(shí)現(xiàn)過(guò)程詳細(xì)講解
MetaClass元類(lèi),本質(zhì)也是一個(gè)類(lèi),但和普通類(lèi)的用法不同,它可以對(duì)類(lèi)內(nèi)部的定義(包括類(lèi)屬性和類(lèi)方法)進(jìn)行動(dòng)態(tài)的修改。可以這么說(shuō),使用元類(lèi)的主要目的就是為了實(shí)現(xiàn)在創(chuàng)建類(lèi)時(shí),能夠動(dòng)態(tài)地改變類(lèi)中定義的屬性或者方法2022-11-11Python3.5基礎(chǔ)之函數(shù)的定義與使用實(shí)例詳解【參數(shù)、作用域、遞歸、重載等】
這篇文章主要介紹了Python3.5基礎(chǔ)之函數(shù)的定義與使用,結(jié)合實(shí)例形式詳細(xì)分析了Python3.5函數(shù)的定義、參數(shù)、作用域、遞歸、重載、內(nèi)置函數(shù)等基本概念與相關(guān)使用技巧,需要的朋友可以參考下2019-04-04Python3.5 + sklearn利用SVM自動(dòng)識(shí)別字母驗(yàn)證碼方法示例
這篇文章主要給大家介紹了關(guān)于Python3.5 + sklearn利用SVM自動(dòng)識(shí)別字母驗(yàn)證碼的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05