python基礎(chǔ)教程之面向?qū)ο蟮囊恍└拍?/h1>
更新時(shí)間:2014年08月29日 10:26:57 作者:Vamei
這篇文章主要介紹了python基礎(chǔ)教程之面向?qū)ο蟮囊恍└拍?面向?qū)ο笫且环N代碼組織方式,讓代碼復(fù)用最大化,需要的朋友可以參考下
Python使用類(class)和對(duì)象(object),進(jìn)行面向?qū)ο螅╫bject-oriented programming,簡稱OOP)的編程。
面向?qū)ο蟮淖钪饕康氖翘岣叱绦虻闹貜?fù)使用性。我們這么早切入面向?qū)ο缶幊痰脑蚴?,Python的整個(gè)概念是基于對(duì)象的。了解OOP是進(jìn)一步學(xué)習(xí)Python的關(guān)鍵。
下面是對(duì)面向?qū)ο蟮囊环N理解,基于分類。
相近對(duì)象,歸為類
在人類認(rèn)知中,會(huì)根據(jù)屬性相近把東西歸類,并且給類別命名。比如說,鳥類的共同屬性是有羽毛,通過產(chǎn)卵生育后代。任何一只特別的鳥都在鳥類的原型基礎(chǔ)上的。
面向?qū)ο缶褪悄M了以上人類認(rèn)知過程。在Python語言,為了聽起來酷,我們把上面說的“東西”稱為對(duì)象(object)。
先定義鳥類
復(fù)制代碼 代碼如下:
class Bird(object):
have_feather = True
way_of_reproduction = 'egg'
我們定義了一個(gè)類別(class),就是鳥(Bird)。在隸屬于這個(gè)類比的語句塊中,我們定義了兩個(gè)變量,一個(gè)是有羽毛(have_feather),一個(gè)是生殖方式(way_of_reproduction),這兩個(gè)變量對(duì)應(yīng)我們剛才說的屬性(attribute)。我們暫時(shí)先不說明括號(hào)以及其中的內(nèi)容,記為問題1。
假設(shè)我養(yǎng)了一只小雞,叫summer。它是個(gè)對(duì)象,且屬于鳥類。使用前面定義的類:
復(fù)制代碼 代碼如下:
summer = Bird()
print summer.way_of_reproduction
通過第一句創(chuàng)建對(duì)象,并說明summer是類別鳥中的一個(gè)對(duì)象,summer就有了鳥的類屬性,對(duì)屬性的引用是通過 對(duì)象.屬性(object.attribute) 的形式實(shí)現(xiàn)的。
可憐的summer,你就是個(gè)有毛產(chǎn)的蛋貨,好不精致。
動(dòng)作
日常認(rèn)知中,我們?cè)谕ㄟ^屬性識(shí)別類別的時(shí)候,有時(shí)根據(jù)這個(gè)東西能做什么事情來區(qū)分類別。比如說,鳥會(huì)移動(dòng)。這樣,鳥就和房屋的類別區(qū)分開了。這些動(dòng)作會(huì)帶來一定的結(jié)果,比如移動(dòng)導(dǎo)致位置的變化。
這樣的一些“行為”屬性為方法(method)。Python中通過在類的內(nèi)部定義函數(shù),來說明方法。
復(fù)制代碼 代碼如下:
class Bird(object):
have_feather = True
way_of_reproduction = 'egg'
def move(self, dx, dy):
position = [0,0]
position[0] = position[0] + dx
position[1] = position[1] + dy
return position
summer = Bird()
print 'after move:',summer.move(5,8)
我們重新定義了鳥這個(gè)類別。鳥新增一個(gè)方法屬性,就是表示移動(dòng)的方法move。(我承認(rèn)這個(gè)方法很傻,你可以在看過下一講之后定義個(gè)有趣些的方法)
(它的參數(shù)中有一個(gè)self,它是為了方便我們引用對(duì)象自身。方法的第一個(gè)參數(shù)必須是self,無論是否用到。有關(guān)self的內(nèi)容會(huì)在下一講展開)
另外兩個(gè)參數(shù),dx, dy表示在x、y兩個(gè)方向移動(dòng)的距離。move方法會(huì)最終返回運(yùn)算過的position。
在最后調(diào)用move方法的時(shí)候,我們只傳遞了dx和dy兩個(gè)參數(shù),不需要傳遞self參數(shù)(因?yàn)閟elf只是為了內(nèi)部使用)。
我的summer可以跑了。
子類
類別本身還可以進(jìn)一步細(xì)分成子類
比如說,鳥類可以進(jìn)一步分成雞,大雁,黃鸝。
在OOP中,我們通過繼承(inheritance)來表達(dá)上述概念。
復(fù)制代碼 代碼如下:
class Chicken(Bird):
way_of_move = 'walk'
possible_in_KFC = True
class Oriole(Bird):
way_of_move = 'fly'
possible_in_KFC = False
summer = Chicken()
print summer.have_feather
print summer.move(5,8)
新定義的雞(Chicken)類的,增加了兩個(gè)屬性:移動(dòng)方式(way_of_move),可能在KFC找到(possible_in_KFC)
在類定義時(shí),括號(hào)里為了Bird。這說明,Chicken是屬于鳥類(Bird)的一個(gè)子類,即Chicken繼承自Bird。自然而然,Bird就是Chicken的父類。Chicken將享有Bird的所有屬性。盡管我只聲明了summer是雞類,它通過繼承享有了父類的屬性(無論是變量屬性have_feather還是方法屬性move)
新定義的黃鸝(Oriole)類,同樣繼承自鳥類。在創(chuàng)建一個(gè)黃鸝對(duì)象時(shí),該對(duì)象自動(dòng)擁有鳥類的屬性。
通過繼承制度,我們可以減少程序中的重復(fù)信息和重復(fù)語句。如果我們分別定義兩個(gè)類,而不繼承自鳥類,就必須把鳥類的屬性分別輸入到雞類和黃鸝類的定義中。整個(gè)過程會(huì)變得繁瑣,因此,面向?qū)ο筇岣吡顺绦虻目芍貜?fù)使用性。
(回到問題1, 括號(hào)中的object,當(dāng)括號(hào)中為object時(shí),說明這個(gè)類沒有父類(到頭了))
將各種各樣的東西分類,從而了解世界,從人類祖先開始,我們就在練習(xí)了這個(gè)認(rèn)知過程,面向?qū)ο笫欠先祟愃季S習(xí)慣的。所謂面向過程,也就是執(zhí)行完一個(gè)語句再執(zhí)行下一個(gè),更多的是機(jī)器思維。通過面向?qū)ο蟮木幊?,我們可以更方便的表達(dá)思維中的復(fù)雜想法。
總結(jié)
將東西根據(jù)屬性歸類 ( 將object歸為class )
方法是一種屬性,表示動(dòng)作
用繼承來說明父類-子類關(guān)系。子類自動(dòng)具有父類的所有屬性。
self代表了根據(jù)類定義而創(chuàng)建的對(duì)象。
建立對(duì)一個(gè)對(duì)象: 對(duì)象名 = 類名()
引用對(duì)象的屬性: object.attribute
您可能感興趣的文章:- Python面向?qū)ο蟪绦蛟O(shè)計(jì)OOP入門教程【類,實(shí)例,繼承,重載等】
- Python面向?qū)ο笾惖膬?nèi)置attr屬性示例
- Python 面向?qū)ο?成員的訪問約束
- 淺談python中的面向?qū)ο蠛皖惖幕菊Z法
- 深入講解Python中面向?qū)ο缶幊痰南嚓P(guān)知識(shí)
- python面向?qū)ο骭詳談?lì)惖睦^承與方法的重載
- Python構(gòu)造函數(shù)及解構(gòu)函數(shù)介紹
- Python 含參構(gòu)造函數(shù)實(shí)例詳解
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)OOP深入分析【構(gòu)造函數(shù),組合類,工具類等】
相關(guān)文章
-
單步調(diào)試 step into/step out/step over 區(qū)
這篇文章主要介紹了單步調(diào)試 step into/step out/step over 區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教 2022-11-11
-
Python 2.6.6升級(jí)到Python2.7.15的詳細(xì)步驟
這篇文章主要介紹了Python 2.6.6升級(jí)到Python2.7.15的詳細(xì)步驟,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下 2020-12-12
-
解決Pycharm 包已經(jīng)下載,但是運(yùn)行代碼提示找不到模塊的問題
今天小編就為大家分享一篇解決Pycharm 包已經(jīng)下載,但是運(yùn)行代碼提示找不到模塊的問題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧 2019-08-08
-
Python黑魔法遠(yuǎn)程控制開機(jī)的實(shí)例
這篇文章主要介紹了Python黑魔法遠(yuǎn)程控制開機(jī)的實(shí)例,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很大的幫助,需要的朋友可以參考下 2021-04-04
-
Python腳本修改Maya ASCII文件路徑方法實(shí)現(xiàn)
本文主要介紹了Python腳本修改Maya ASCII文件路徑方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧 2023-02-02
-
Python?ConfigParser庫輕松讀寫INI文件實(shí)例探究
這篇文章主要為大家介紹了Python?ConfigParser庫輕松讀寫INI文件實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪 2024-01-01
-
PyTorch預(yù)訓(xùn)練的實(shí)現(xiàn)
這篇文章主要介紹了PyTorch預(yù)訓(xùn)練的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧 2019-09-09
-
使用Python Tkinter實(shí)現(xiàn)剪刀石頭布小游戲功能
這篇文章主要介紹了使用Python Tkinter實(shí)現(xiàn)剪刀石頭布小游戲功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下 2020-10-10
最新評(píng)論
Python使用類(class)和對(duì)象(object),進(jìn)行面向?qū)ο螅╫bject-oriented programming,簡稱OOP)的編程。
面向?qū)ο蟮淖钪饕康氖翘岣叱绦虻闹貜?fù)使用性。我們這么早切入面向?qū)ο缶幊痰脑蚴?,Python的整個(gè)概念是基于對(duì)象的。了解OOP是進(jìn)一步學(xué)習(xí)Python的關(guān)鍵。
下面是對(duì)面向?qū)ο蟮囊环N理解,基于分類。
相近對(duì)象,歸為類
在人類認(rèn)知中,會(huì)根據(jù)屬性相近把東西歸類,并且給類別命名。比如說,鳥類的共同屬性是有羽毛,通過產(chǎn)卵生育后代。任何一只特別的鳥都在鳥類的原型基礎(chǔ)上的。
面向?qū)ο缶褪悄M了以上人類認(rèn)知過程。在Python語言,為了聽起來酷,我們把上面說的“東西”稱為對(duì)象(object)。
先定義鳥類
class Bird(object):
have_feather = True
way_of_reproduction = 'egg'
我們定義了一個(gè)類別(class),就是鳥(Bird)。在隸屬于這個(gè)類比的語句塊中,我們定義了兩個(gè)變量,一個(gè)是有羽毛(have_feather),一個(gè)是生殖方式(way_of_reproduction),這兩個(gè)變量對(duì)應(yīng)我們剛才說的屬性(attribute)。我們暫時(shí)先不說明括號(hào)以及其中的內(nèi)容,記為問題1。
假設(shè)我養(yǎng)了一只小雞,叫summer。它是個(gè)對(duì)象,且屬于鳥類。使用前面定義的類:
summer = Bird()
print summer.way_of_reproduction
通過第一句創(chuàng)建對(duì)象,并說明summer是類別鳥中的一個(gè)對(duì)象,summer就有了鳥的類屬性,對(duì)屬性的引用是通過 對(duì)象.屬性(object.attribute) 的形式實(shí)現(xiàn)的。
可憐的summer,你就是個(gè)有毛產(chǎn)的蛋貨,好不精致。
動(dòng)作
日常認(rèn)知中,我們?cè)谕ㄟ^屬性識(shí)別類別的時(shí)候,有時(shí)根據(jù)這個(gè)東西能做什么事情來區(qū)分類別。比如說,鳥會(huì)移動(dòng)。這樣,鳥就和房屋的類別區(qū)分開了。這些動(dòng)作會(huì)帶來一定的結(jié)果,比如移動(dòng)導(dǎo)致位置的變化。
這樣的一些“行為”屬性為方法(method)。Python中通過在類的內(nèi)部定義函數(shù),來說明方法。
class Bird(object):
have_feather = True
way_of_reproduction = 'egg'
def move(self, dx, dy):
position = [0,0]
position[0] = position[0] + dx
position[1] = position[1] + dy
return position
summer = Bird()
print 'after move:',summer.move(5,8)
我們重新定義了鳥這個(gè)類別。鳥新增一個(gè)方法屬性,就是表示移動(dòng)的方法move。(我承認(rèn)這個(gè)方法很傻,你可以在看過下一講之后定義個(gè)有趣些的方法)
(它的參數(shù)中有一個(gè)self,它是為了方便我們引用對(duì)象自身。方法的第一個(gè)參數(shù)必須是self,無論是否用到。有關(guān)self的內(nèi)容會(huì)在下一講展開)
另外兩個(gè)參數(shù),dx, dy表示在x、y兩個(gè)方向移動(dòng)的距離。move方法會(huì)最終返回運(yùn)算過的position。
在最后調(diào)用move方法的時(shí)候,我們只傳遞了dx和dy兩個(gè)參數(shù),不需要傳遞self參數(shù)(因?yàn)閟elf只是為了內(nèi)部使用)。
我的summer可以跑了。
子類
類別本身還可以進(jìn)一步細(xì)分成子類
比如說,鳥類可以進(jìn)一步分成雞,大雁,黃鸝。
在OOP中,我們通過繼承(inheritance)來表達(dá)上述概念。
class Chicken(Bird):
way_of_move = 'walk'
possible_in_KFC = True
class Oriole(Bird):
way_of_move = 'fly'
possible_in_KFC = False
summer = Chicken()
print summer.have_feather
print summer.move(5,8)
新定義的雞(Chicken)類的,增加了兩個(gè)屬性:移動(dòng)方式(way_of_move),可能在KFC找到(possible_in_KFC)
在類定義時(shí),括號(hào)里為了Bird。這說明,Chicken是屬于鳥類(Bird)的一個(gè)子類,即Chicken繼承自Bird。自然而然,Bird就是Chicken的父類。Chicken將享有Bird的所有屬性。盡管我只聲明了summer是雞類,它通過繼承享有了父類的屬性(無論是變量屬性have_feather還是方法屬性move)
新定義的黃鸝(Oriole)類,同樣繼承自鳥類。在創(chuàng)建一個(gè)黃鸝對(duì)象時(shí),該對(duì)象自動(dòng)擁有鳥類的屬性。
通過繼承制度,我們可以減少程序中的重復(fù)信息和重復(fù)語句。如果我們分別定義兩個(gè)類,而不繼承自鳥類,就必須把鳥類的屬性分別輸入到雞類和黃鸝類的定義中。整個(gè)過程會(huì)變得繁瑣,因此,面向?qū)ο筇岣吡顺绦虻目芍貜?fù)使用性。
(回到問題1, 括號(hào)中的object,當(dāng)括號(hào)中為object時(shí),說明這個(gè)類沒有父類(到頭了))
將各種各樣的東西分類,從而了解世界,從人類祖先開始,我們就在練習(xí)了這個(gè)認(rèn)知過程,面向?qū)ο笫欠先祟愃季S習(xí)慣的。所謂面向過程,也就是執(zhí)行完一個(gè)語句再執(zhí)行下一個(gè),更多的是機(jī)器思維。通過面向?qū)ο蟮木幊?,我們可以更方便的表達(dá)思維中的復(fù)雜想法。
總結(jié)
將東西根據(jù)屬性歸類 ( 將object歸為class )
方法是一種屬性,表示動(dòng)作
用繼承來說明父類-子類關(guān)系。子類自動(dòng)具有父類的所有屬性。
self代表了根據(jù)類定義而創(chuàng)建的對(duì)象。
建立對(duì)一個(gè)對(duì)象: 對(duì)象名 = 類名()
引用對(duì)象的屬性: object.attribute
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)OOP入門教程【類,實(shí)例,繼承,重載等】
- Python面向?qū)ο笾惖膬?nèi)置attr屬性示例
- Python 面向?qū)ο?成員的訪問約束
- 淺談python中的面向?qū)ο蠛皖惖幕菊Z法
- 深入講解Python中面向?qū)ο缶幊痰南嚓P(guān)知識(shí)
- python面向?qū)ο骭詳談?lì)惖睦^承與方法的重載
- Python構(gòu)造函數(shù)及解構(gòu)函數(shù)介紹
- Python 含參構(gòu)造函數(shù)實(shí)例詳解
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)OOP深入分析【構(gòu)造函數(shù),組合類,工具類等】
相關(guān)文章
單步調(diào)試 step into/step out/step over 區(qū)
這篇文章主要介紹了單步調(diào)試 step into/step out/step over 區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11Python 2.6.6升級(jí)到Python2.7.15的詳細(xì)步驟
這篇文章主要介紹了Python 2.6.6升級(jí)到Python2.7.15的詳細(xì)步驟,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12解決Pycharm 包已經(jīng)下載,但是運(yùn)行代碼提示找不到模塊的問題
今天小編就為大家分享一篇解決Pycharm 包已經(jīng)下載,但是運(yùn)行代碼提示找不到模塊的問題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08Python黑魔法遠(yuǎn)程控制開機(jī)的實(shí)例
這篇文章主要介紹了Python黑魔法遠(yuǎn)程控制開機(jī)的實(shí)例,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很大的幫助,需要的朋友可以參考下2021-04-04Python腳本修改Maya ASCII文件路徑方法實(shí)現(xiàn)
本文主要介紹了Python腳本修改Maya ASCII文件路徑方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Python?ConfigParser庫輕松讀寫INI文件實(shí)例探究
這篇文章主要為大家介紹了Python?ConfigParser庫輕松讀寫INI文件實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01PyTorch預(yù)訓(xùn)練的實(shí)現(xiàn)
這篇文章主要介紹了PyTorch預(yù)訓(xùn)練的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09使用Python Tkinter實(shí)現(xiàn)剪刀石頭布小游戲功能
這篇文章主要介紹了使用Python Tkinter實(shí)現(xiàn)剪刀石頭布小游戲功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10