詳解Python:面向?qū)ο缶幊?/h1>
更新時(shí)間:2019年04月10日 14:09:09 作者:Tendency1060
這篇文章主要介紹了Python面向?qū)ο缶幊?,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
面向過(guò)程的程序設(shè)計(jì)把計(jì)算機(jī)程序視為一系列的命令集合,即一組函數(shù)的順序執(zhí)行。為了簡(jiǎn)化程序設(shè)計(jì),面向過(guò)程把函數(shù)繼續(xù)切分為子函數(shù),即把大塊函數(shù)通過(guò)切割成小塊函數(shù)來(lái)降低系統(tǒng)的復(fù)雜度
python和java都是面向?qū)ο蟮恼Z(yǔ)言。面向?qū)ο缶幊痰奶攸c(diǎn)數(shù)據(jù)封裝、繼承和多態(tài)
1.類(lèi)和實(shí)例
面向?qū)ο笞钪匾母拍罹褪穷?lèi)(Class)和實(shí)例(Instance),必須牢記類(lèi)是抽象的模板,比如Student類(lèi),而實(shí)例是根據(jù)類(lèi)創(chuàng)建出來(lái)的一個(gè)個(gè)具體的“對(duì)象”,每個(gè)對(duì)象都擁有相同的方法,但各自的數(shù)據(jù)可能不同。
在python中,定義類(lèi)同樣也是使用class關(guān)鍵字,class后面緊跟著的是類(lèi)名,需要開(kāi)頭大寫(xiě),之后的括號(hào)里表示的是繼承的哪個(gè)類(lèi),即它的父類(lèi)。
class Student(object):
pass
我們可以自由地給這個(gè)變量綁定屬性
>>>nick.name = 'Liu Ling Hao'
>>>nick.name
'Liu Ling Hao'
而之后定義的不同的函數(shù)則是方法??偨Y(jié)來(lái)說(shuō)對(duì)象=屬性+方法
由于類(lèi)可以起到模板的作用,因此,可以在創(chuàng)建實(shí)例的時(shí)候,把一些我們認(rèn)為必須綁定的屬性強(qiáng)制填寫(xiě)進(jìn)去。此時(shí)就需要用到比較特殊的__init__方法。(int 前后各有兩個(gè)下劃線(xiàn))
__init__方法的第一個(gè)參數(shù)永遠(yuǎn)是self,表示創(chuàng)建的實(shí)例本身。
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = scor
>>> bart = Student('Bart Simpson', 59)
>>> bart.name
'Bart Simpson'
>>> bart.score
59
當(dāng)有了__init__方法之后,在創(chuàng)建實(shí)例的時(shí)候,就不能傳入空的參數(shù)了,必須傳入與__init__方法匹配的參數(shù)
2.封裝,繼承和多態(tài)
面向?qū)ο缶幊痰囊粋€(gè)重要特點(diǎn)就是數(shù)據(jù)封裝。
就像上面例子中的name和score,我們可以直接在類(lèi)的內(nèi)部定義的函數(shù)去訪(fǎng)問(wèn),,比如可以添加一個(gè)數(shù)據(jù)或者對(duì)于一個(gè)列表進(jìn)行排序,我們可以實(shí)現(xiàn),但是我們并不知道它的內(nèi)部是通過(guò)如何調(diào)節(jié)而實(shí)現(xiàn)的。
當(dāng)我們定義一個(gè)class的時(shí)候,可以從某個(gè)現(xiàn)有的class繼承,新的class稱(chēng)為子類(lèi)(Subclass),而被繼承的class稱(chēng)為基類(lèi)、父類(lèi)或超類(lèi)(Base class、Super class)。
繼承的好處就是獲得了父類(lèi)的全部功能,對(duì)于子類(lèi)而言,可以在父類(lèi)的基礎(chǔ)上接著寫(xiě),更加方便
class Person(object):
def idea(self):
print('study is happy')
class Liu(Person):
pass
liu =Liu()
liu.idea
study is happy
當(dāng)然子類(lèi)如果有和父類(lèi)同樣的方法時(shí)會(huì)自動(dòng)覆蓋掉父類(lèi)的
多態(tài):不同對(duì)象對(duì)同一方法響應(yīng)不同的行動(dòng)
>>>class Nick1:
def name(self):
print("我是1")
>>>class Nick2:
def name(self):
print("我是2")
>>>a = Nick1()
>>>b = Nick2()
>>>a.name
我是1
>>>b.name
我是2
使用的函數(shù)名雖然一樣但是實(shí)現(xiàn)并不一樣。
def run(animal):
animal.run()
animal.run()
>>> run(Animal())
Animal is running...
Animal is running...
>>> run_twice(Dog())
Dog is running...
Dog is running...
多態(tài)的好處就是,當(dāng)我們需要傳入Dog或者其它動(dòng)物時(shí),我們只需要接收Animal類(lèi)型就可以了,因?yàn)镈og都是Animal類(lèi)型,然后,按照Animal類(lèi)型進(jìn)行操作即可。由于Animal類(lèi)型有run()方法,因此,傳入的任意類(lèi)型,只要是Animal類(lèi)或者子類(lèi),就會(huì)自動(dòng)調(diào)用實(shí)際類(lèi)型的run()方法,這就是多態(tài)
以上所述是小編給大家介紹的Python面向?qū)ο缶幊淘斀庹?,希望?duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
-
python無(wú)法識(shí)別vim中文代碼的解決方案
這篇文章主要介紹了python無(wú)法識(shí)別vim中文代碼的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧 2021-03-03
-
python庫(kù)geopandas讀取寫(xiě)入空間數(shù)據(jù)及繪圖實(shí)例探索
這篇文章主要為大家介紹了python庫(kù)geopandas讀取寫(xiě)入空間數(shù)據(jù)及繪圖實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR> 2024-02-02
-
Python 字典與字符串的互轉(zhuǎn)實(shí)例
下面小編就為大家?guī)?lái)一篇Python 字典與字符串的互轉(zhuǎn)實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧 2017-01-01
-
簡(jiǎn)單的連接MySQL與Python的Bottle框架的方法
這篇文章主要介紹了簡(jiǎn)單的連接MySQL與Python的Bottle框架的方法,主要基于mysql-connector插件,需要的朋友可以參考下 2015-04-04
-
Python?OpenCV中常用圖片處理函數(shù)小結(jié)
在計(jì)算機(jī)視覺(jué)和圖像處理領(lǐng)域,OpenCV(Open?Source?Computer?Vision?Library)是一個(gè)非常強(qiáng)大和流行的開(kāi)源庫(kù),本文將介紹一些常用的OpenCV函數(shù),希望對(duì)大家有所幫助 2024-03-03
最新評(píng)論
面向過(guò)程的程序設(shè)計(jì)把計(jì)算機(jī)程序視為一系列的命令集合,即一組函數(shù)的順序執(zhí)行。為了簡(jiǎn)化程序設(shè)計(jì),面向過(guò)程把函數(shù)繼續(xù)切分為子函數(shù),即把大塊函數(shù)通過(guò)切割成小塊函數(shù)來(lái)降低系統(tǒng)的復(fù)雜度
python和java都是面向?qū)ο蟮恼Z(yǔ)言。面向?qū)ο缶幊痰奶攸c(diǎn)數(shù)據(jù)封裝、繼承和多態(tài)
1.類(lèi)和實(shí)例
面向?qū)ο笞钪匾母拍罹褪穷?lèi)(Class)和實(shí)例(Instance),必須牢記類(lèi)是抽象的模板,比如Student類(lèi),而實(shí)例是根據(jù)類(lèi)創(chuàng)建出來(lái)的一個(gè)個(gè)具體的“對(duì)象”,每個(gè)對(duì)象都擁有相同的方法,但各自的數(shù)據(jù)可能不同。
在python中,定義類(lèi)同樣也是使用class關(guān)鍵字,class后面緊跟著的是類(lèi)名,需要開(kāi)頭大寫(xiě),之后的括號(hào)里表示的是繼承的哪個(gè)類(lèi),即它的父類(lèi)。
class Student(object): pass
我們可以自由地給這個(gè)變量綁定屬性
>>>nick.name = 'Liu Ling Hao' >>>nick.name 'Liu Ling Hao'
而之后定義的不同的函數(shù)則是方法??偨Y(jié)來(lái)說(shuō)對(duì)象=屬性+方法
由于類(lèi)可以起到模板的作用,因此,可以在創(chuàng)建實(shí)例的時(shí)候,把一些我們認(rèn)為必須綁定的屬性強(qiáng)制填寫(xiě)進(jìn)去。此時(shí)就需要用到比較特殊的__init__方法。(int 前后各有兩個(gè)下劃線(xiàn))
__init__方法的第一個(gè)參數(shù)永遠(yuǎn)是self,表示創(chuàng)建的實(shí)例本身。
class Student(object): def __init__(self, name, score): self.name = name self.score = scor >>> bart = Student('Bart Simpson', 59) >>> bart.name 'Bart Simpson' >>> bart.score 59
當(dāng)有了__init__方法之后,在創(chuàng)建實(shí)例的時(shí)候,就不能傳入空的參數(shù)了,必須傳入與__init__方法匹配的參數(shù)
2.封裝,繼承和多態(tài)
面向?qū)ο缶幊痰囊粋€(gè)重要特點(diǎn)就是數(shù)據(jù)封裝。
就像上面例子中的name和score,我們可以直接在類(lèi)的內(nèi)部定義的函數(shù)去訪(fǎng)問(wèn),,比如可以添加一個(gè)數(shù)據(jù)或者對(duì)于一個(gè)列表進(jìn)行排序,我們可以實(shí)現(xiàn),但是我們并不知道它的內(nèi)部是通過(guò)如何調(diào)節(jié)而實(shí)現(xiàn)的。
當(dāng)我們定義一個(gè)class的時(shí)候,可以從某個(gè)現(xiàn)有的class繼承,新的class稱(chēng)為子類(lèi)(Subclass),而被繼承的class稱(chēng)為基類(lèi)、父類(lèi)或超類(lèi)(Base class、Super class)。
繼承的好處就是獲得了父類(lèi)的全部功能,對(duì)于子類(lèi)而言,可以在父類(lèi)的基礎(chǔ)上接著寫(xiě),更加方便
class Person(object): def idea(self): print('study is happy') class Liu(Person): pass liu =Liu() liu.idea study is happy
當(dāng)然子類(lèi)如果有和父類(lèi)同樣的方法時(shí)會(huì)自動(dòng)覆蓋掉父類(lèi)的
多態(tài):不同對(duì)象對(duì)同一方法響應(yīng)不同的行動(dòng)
>>>class Nick1: def name(self): print("我是1") >>>class Nick2: def name(self): print("我是2") >>>a = Nick1() >>>b = Nick2() >>>a.name 我是1 >>>b.name 我是2
使用的函數(shù)名雖然一樣但是實(shí)現(xiàn)并不一樣。
def run(animal): animal.run() animal.run() >>> run(Animal()) Animal is running... Animal is running... >>> run_twice(Dog()) Dog is running... Dog is running...
多態(tài)的好處就是,當(dāng)我們需要傳入Dog或者其它動(dòng)物時(shí),我們只需要接收Animal類(lèi)型就可以了,因?yàn)镈og都是Animal類(lèi)型,然后,按照Animal類(lèi)型進(jìn)行操作即可。由于Animal類(lèi)型有run()方法,因此,傳入的任意類(lèi)型,只要是Animal類(lèi)或者子類(lèi),就會(huì)自動(dòng)調(diào)用實(shí)際類(lèi)型的run()方法,這就是多態(tài)
以上所述是小編給大家介紹的Python面向?qū)ο缶幊淘斀庹?,希望?duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
python無(wú)法識(shí)別vim中文代碼的解決方案
這篇文章主要介紹了python無(wú)法識(shí)別vim中文代碼的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03python庫(kù)geopandas讀取寫(xiě)入空間數(shù)據(jù)及繪圖實(shí)例探索
這篇文章主要為大家介紹了python庫(kù)geopandas讀取寫(xiě)入空間數(shù)據(jù)及繪圖實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2024-02-02Python 字典與字符串的互轉(zhuǎn)實(shí)例
下面小編就為大家?guī)?lái)一篇Python 字典與字符串的互轉(zhuǎn)實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01簡(jiǎn)單的連接MySQL與Python的Bottle框架的方法
這篇文章主要介紹了簡(jiǎn)單的連接MySQL與Python的Bottle框架的方法,主要基于mysql-connector插件,需要的朋友可以參考下2015-04-04Python?OpenCV中常用圖片處理函數(shù)小結(jié)
在計(jì)算機(jī)視覺(jué)和圖像處理領(lǐng)域,OpenCV(Open?Source?Computer?Vision?Library)是一個(gè)非常強(qiáng)大和流行的開(kāi)源庫(kù),本文將介紹一些常用的OpenCV函數(shù),希望對(duì)大家有所幫助2024-03-03