Python使用類別(class)和物件(object),進行物件導向(object-oriented programming,簡稱OOP)的程式設計。
物件導向的最主要目的是提高程式的重複使用性。我們這麼早切入物件導向程式的原因是,Python的整個概念是基於物件的。了解OOP是進一步學習Python的關鍵。
以下是對物件導向的一種理解,基於分類。
相近對象,歸為類別
在人類認知中,會根據屬性相近把東西歸類,並且給類別命名。比如說,鳥類的共同屬性是有羽毛,透過產卵來生育後代。任何一隻特別的鳥都在鳥類的原型上的。
物件導向就是模擬了以上人類認知過程。在Python語言,為了聽起來酷,我們把上面說的「東西」稱為物件(object)。
先定義鳥類
class Bird(object): have_feather = True way_of_reproduction = 'egg'
我們定義了一個類別(class),就是鳥(Bird)。在隸屬於這個類比的語句區塊中,我們定義了兩個變數,一個是有羽毛(have_feather),一個是生殖方式(way_of_reproduction),這兩個變數對應我們剛才說的屬性( attribute)。我們暫時先不說明括號以及其中的內容,記為問題1。
假設我養了一隻小雞,叫summer。它是個對象,且屬於鳥類。使用前面定義的類別:
summer = Bird() print summer.way_of_reproduction
透過第一句建立物件,並說明summer是類別鳥中的一個對象,summer就有了鳥的類別屬性,對屬性的引用是透過物件.屬性(object.attribute) 的形式實現的。
可憐的summer,你就是毛產的蛋貨,好不精緻。
動作
日常認知中,我們在透過屬性辨識類別的時候,有時會根據這個東西能做什麼事情來區分類別。比如說,鳥會移動。這樣,鳥就和房子的類別區分開了。這些動作會帶來一定的結果,例如移動導致位置的改變。
這樣的一些「行為」屬性為方法(method)。 Python中透過在類別的內部定義函數,來說明方法。
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)
我們重新定義了鳥這個類別。鳥新增一個方法屬性,就是表示移動的方法move。 (我承認這個方法很傻,你可以在看過下一講之後定義個有趣些的方法)
(它的參數中有一個self,它是為了方便我們引用對象自身。方法的第一個參數必須是self,不論是否用到。 move方法會最終傳回運算過的position。
在最後呼叫move方法的時候,我們只傳遞了dx和dy兩個參數,不需要傳遞self參數(因為self只是為了內部使用)。
我的summer可以跑了。
子類別
類別本身還可以進一步細分成子類別
比如說,鳥類可以進一步分成雞,大雁,黃鷂。
在OOP中,我們透過
繼承(inheritance)來表達上述概念。 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)類別的,增加了兩個屬性:移動方式(way_of_move),可能在KFC找到(possible_in_KFC)
在類別定義時,括號裡為了Bird。這說明,Chicken是屬於鳥類(Bird)的子類,即Chicken繼承自Bird。自然而然,Bird就是Chicken的父類。 Chicken將享有Bird的所有屬性。儘管我只聲明了summer是雞類,它透過繼承享有了父類的屬性(無論是變數屬性have_feather還是方法屬性move)
新定義的黃鷂(Oriole)類,同樣繼承自鳥類。在建立一個黃鷂物件時,該物件自動擁有鳥類的屬性。
透過繼承製度,我們可以減少程式中的重複訊息和重複語句。如果我們分別定義兩個類,而不繼承自鳥類,就必須把鳥類的屬性分別輸入到雞類和黃鷂類的定義中。整個過程會變得繁瑣,因此,物件導向提高了程式的可重複使用性。
(回到問題1, 括號中的object,當括號中為object時,表示這個類別沒有父類別(到頭了))
將各種各樣的東西分類,從而了解世界,從人類祖先開始,我們就在練習了這個認知過程,而面向對像是符合人類思維習慣的。所謂面向過程,也就是執行完一個語句再執行下一個,更多的是機器思維。透過物件導向的編程,我們可以更方便的表達思維中的複雜想法。
總結
將東西根據屬性歸類( 將object歸為class )
方法是一種屬性,表示動作
#用繼承來說明父類-子類關係。子類別自動具有父類別的所有屬性。
self代表了根據類別定義而建立的物件。
建立對物件: 物件名稱 = 類別名稱()
參考物件的屬性: object.attribute
以上是Python物件導向的基本概念介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

如何解決jieba分詞在景區評論分析中的問題?當我們在進行景區評論分析時,往往會使用jieba分詞工具來處理文�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver Mac版
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版
中文版,非常好用