class 類
object 對象
object-oriented programming 面向對象,簡稱OOP
attribute 屬性
method 方法
inheritance 繼承
python中通過類和對象來實現 面向對象的編程
面向對象編程,最重要、主要的目的是:提高程序的重複使用性,這和函數的目的類似
python中一切皆對象,類也是對象
1 類是屬性相近對象的歸類
在人類認知中,會根據屬性相近把‘東西’歸類,並且給‘類別‘命名
比如鳥類共同屬性是有羽毛,通過產卵生育後代。任何一隻特別的鳥都是建立在鳥類的原型基礎上
面向對象就是模擬了以上人類認知的過程。在python中,上述的‘東西‘稱爲對象
定義鳥類
- class Bird(object):#類,鳥;類
- have_feather = True#變量,羽毛;屬性
- way_of_reproduction = 'egg'#變量,生殖方式;屬性
定義類,名字鳥
該‘類別’中定義變量,1是否有羽毛,2生殖方式
這2個變量對應我們之前所說的屬性
假如我養了一隻小雞,叫summer。他是個對象,屬於鳥類。使用前面定義的類
- summer = Bird()#創建對象,初始化類
- print summer.way_of_reproduction#調用類屬性
第一句賦值語句,創建了對象並說明summer是類’鳥’中的一個對象, summer就有了鳥的’類屬性'
對屬性的引用是通過 對象.屬性(object.attribute)的形式來實現
2 類屬性可以是變量,也可以是方法(動作)
在人類日常認知中,我們在通過屬性識別‘類別‘的時候,有時候會根據這個’東西’能做什麼事情來區分類別
比如,鳥類會移動(這樣就可以和房屋的類別區分開了)。而這些動作又會帶來一定的結果,比如通過移動會帶來位置的變化
python中,這樣的屬性稱爲方法。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)#調用類的函數(方法)
類的函數(其實也是類的屬性,只不過是一個特殊的屬性),被稱爲類的方法,簡稱方法
(括號中的object,當括號中爲object時,說明這個類沒有父類(到頭了))
該處,類’鳥‘新增一個屬性,即移動(類的函數move)
(函數/方法有一個參數self,是爲了方便引用對象自身,函數/方法也是對象),函數/方法的第一個參數必須爲self,無論是否用到
另外2個參數,dx dy表示在2個方向移動的距離,move方法會最終返回運算過的position
另外調用move方法時,只傳遞了dx dy的值,不需要傳遞self參數(因爲slef參數只是爲了內部使用)
- 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)
通過繼承製度,我們可以避免程序中的重複信息和重複語句。(如果我們分別定義兩個類,而不繼承自鳥類,那麼我們就必須把鳥類的屬性分別敲到雞類和黃鸝類的定義中)
所以說,面向對象提高了程序的可重複使用性
我們可以看到,面向對象實際上基於人類認知時的習慣,將各種各樣的東西分類,從而瞭解世界。我們從祖先開始可能已經練習了這個認知過程有幾百萬年,所以面向對象是很符合人類思維習慣的編程方法。所謂面向過程(也就是執行完一個語句再執行下一個)實際上是機器思維。通過面向對象的編程,我們實際上是更貼近我們自然的思維方式,也更方便和其他人交流我們程序裏所包含的想法,甚至於那個人並不是程序員
總結:
將東西根據屬性歸類 ( 將object歸爲class )
方法是一種屬性,表示動作
用繼承來說明父類-子類關係。子類自動具有父類的所有屬性。
self代表了根據該類定義而創建的對象。
建立對一個對象: 對象名 = 類名()
引用對象的屬性: object.attribute
作者:Vamei 出處:http://www.cnblogs.com/vamei