Python類繼承和多態(tài)原理解析
這篇文章主要介紹了python類繼承和多態(tài)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
現(xiàn)在屬于是老年人的腦子,東西寫著寫著就忘了,東西記著記著就不知道了。之前學(xué)C++的時(shí)候就把類、對象這塊弄得亂七八糟,現(xiàn)在是因?yàn)楹芟胪鎝ython,所以就看看python的類和對象。
就像說的,類有三個(gè)特征:封裝、繼承、多態(tài)。
1、封裝:類封裝了一些方法,可通過一定的規(guī)則約定方法進(jìn)行訪問權(quán)限。
C++中的成員變量有public、private、ptotected。
在python中,默認(rèn)的成員變量都是public的,如果成員變量前面是加兩個(gè)下劃線,表示該成員變量是私有的。并且private類不能被繼承類引用,并且不允許直接訪問。
2、繼承:在定義一個(gè)類的時(shí)候可以從當(dāng)前有的類中進(jìn)行繼承。
python是允許多繼承的,并且在子類中擁有父類所有的成員變量和方法,為了緩解代碼中的冗余,子類在父類的基礎(chǔ)上增加的成員變量可以如下修改。
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
class Child(Person): # Child 繼承 Person
def __init__(self,name,sex,mother,father):
Person.__init__(self,name,sex) # 子類對父類的構(gòu)造方法的調(diào)用
self.mother = mother
self.father = father
May = Child("May","female","April","June")
print(May.name,May.sex,May.mother,May.father)
3、多態(tài):當(dāng)子類繼承父類之后,成員方法既可以重寫也可以不重寫。當(dāng)調(diào)用的時(shí)候只要保證新方法編寫正確,不用管原來的代碼。
對擴(kuò)展開放(Open for extension):允許子類重寫方法函數(shù)
對修改封閉(Closed for modification):不重寫,直接繼承父類方法函數(shù)
python是一種動(dòng)態(tài)語言,動(dòng)態(tài)語言是在運(yùn)行的時(shí)候確定數(shù)據(jù)類型的語言。變量在使用前不用聲明,通常變量的類型是被復(fù)制的那個(gè)值的類型。
靜態(tài)語言是在編譯的時(shí)候變量的數(shù)據(jù)類型即可確定的語言,多數(shù)靜態(tài)類型語言要求在使用變量之前鼻血聲明數(shù)據(jù)類型。
在類中,當(dāng)要對成員變量進(jìn)行約束的時(shí)候可以使用@property,python內(nèi)置的@property裝飾器是負(fù)責(zé)把一個(gè)方法變成屬性調(diào)用
在實(shí)例屬性操作的時(shí)候,就知道該屬性很可能不是直接暴露的,而是通過getter和setter方法來實(shí)現(xiàn)的。還可以定義只讀屬性,只定義getter方法不定義setter就是一個(gè)只讀屬性
請利用@property給一個(gè)Screen對象加上width和height屬性,以及一個(gè)只讀屬性resolution:
class Screen(object) :
@property
def width(self) :
return self._width
@width.setter
def width(self,valuer) :
if not isinstance(valuer,int):
raise ValueError('score must be an integer')
if valuer < 0 :
raise ValueError('score must over zero')
self._width=valuer
@property
def height(self) :
return self._height
@height.setter
def height(self,number) :
if not isinstance(number,int) :
raise ValueError('score must be an integer')
if number < 0 :
raise ValueError('score must be an zero')
self._height = number
@property
def resolution(self):
return self._width * self._height
s=Screen()
s.width = 1024
s.height = 768
print(s.resolution)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
selenium鼠標(biāo)操作實(shí)戰(zhàn)案例詳解
在實(shí)際場景中,會(huì)有單擊、長時(shí)間單擊、雙擊、右鍵、拖拽等鼠標(biāo)操作,selenium提供了名為ActionChains的類來處理這些操作,下面這篇文章主要給大家介紹了關(guān)于selenium鼠標(biāo)操作實(shí)戰(zhàn)案例的相關(guān)資料,需要的朋友可以參考下2023-05-05
Python內(nèi)置函數(shù)—vars的具體使用方法
本篇文章主要介紹了Python內(nèi)置函數(shù)—vars的具體使用方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12
Django使用mysqlclient服務(wù)連接并寫入數(shù)據(jù)庫的操作過程
這篇文章主要介紹了Django使用mysqlclient服務(wù)連接并寫入數(shù)據(jù)庫,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
利用Pytorch實(shí)現(xiàn)ResNet網(wǎng)絡(luò)構(gòu)建及模型訓(xùn)練
這篇文章主要為大家介紹了利用Pytorch實(shí)現(xiàn)ResNet網(wǎng)絡(luò)構(gòu)建及模型訓(xùn)練詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Python中encode和encoding的區(qū)別小結(jié)
Python是一種非常流行的高級編程語言,它提供了許多內(nèi)置函數(shù)和庫來方便地處理文本數(shù)據(jù),其中,encode和encoding是處理文本編碼的重要概念,本文就來介紹一下Python中encode和encoding的區(qū)別小結(jié),感興趣的可以了解一下2023-11-11
基于Python中capitalize()與title()的區(qū)別詳解
下面小編就為大家分享一篇基于Python中capitalize()與title()的區(qū)別詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12
spark?dataframe全局排序id與分組后保留最大值行
這篇文章主要為大家介紹了spark?dataframe全局排序id與分組后保留最大值行實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02

