OOP——Object Oriented Programming,面向對象編程,是一種程序設計思想。該思想將對象作為程序的基本單元,一個對象包含了數據和操作數據的函數。
區別於面向過程的程序設計即把計算機程序視為一系列的命令集合(即一組函數的順序集合),面向對象的程序設計是把計算機程序視為一組對象的集合,每個對象都可以接受其他對象發過來的消息,並可以處理這些消息,計算機程序的執行就是一系列消息在各個對象之間的傳遞。
”萬物皆對象“!
面向對象的設計思想是人們觀察自然中現象的一種認知模式。想想,自然界中,類class和實例Instance的概念是不是很自然而然的呢?比如,定義類Class——動物,而實例Instance則是一個個具體的動物,比如說狗、貓就是兩個具體的動物。
面向對象的設計思想就是抽象出class,然后根據class創建Instance。因為一個class既包含數據,又包含操作數據的方法,所以可以說面向對象的抽象程度比面向函數要高。
Python中所有的數據類型都可以視為對象,也可以自定義對象。自定義對象就是面向對象中的類(Class)的概念。
舉例:
通過class關鍵字來定義一個Student的類:
class Student(object): pass
定義好了Student類(模板)后,就可以根據Student類創建出Student的實例。創建實例是通過類名+()實現的:
>>> WC = Student() >>> Student <class '__main__.Student'> >>> WC <__main__.Student object at 0x03783270>
從上述結果可以看出,WC指向的是Student的實例,內存地址為0x03783270。而Student本身則是一個類,並沒有分配內存地址。
既然類實際是一個模板的作用,那么我們在設計模板的時候,把一些我們認為的一些通用的屬性或者行為強制性的賦予給模板,以后新建實例的實例,就會直接持有這些通用的屬性或者行為了。一般的,通過__init__方法,實現上述過程。
比如,我們認為Student一般都會有name、score屬性:
class Student(object): def __init__(self,name,score self.name = name self.score = score
注意,__init__方法的第一個參數永遠都是self,表示創建的實例本身。在__init__方法內部,就可以把屬性綁定到self上。有了__init__函數后,創建實例的時候,就必須傳入於__init__方法匹配的參數,其中self不需要傳:
>>> WC = Student('Wuchong',99) >>> WC.name 'Wuchong' >>> WC.score 99
WC就是類Student的一個實例。
和一般函數相比,類中定義的函數有點不同:就是第一個參數永遠是self,並且在調用的時候,不需要傳遞該參數。