2018.03.09
AUTHOR: wills
面向對象編程
一切事物都是對象(不管抽象還是具體)
類有靜態屬性,動態特徵
STEP 1. 定義類
類是對象的藍圖和模板,有了類就可以創建對象
定義類需要做兩件事:數據抽象 and 行爲抽象
數據抽象 – 抽取對象共同的靜態特徵(名詞)–》它表示對象的某種屬性
行爲抽象 – 抽取對象共同的動態特徵(動詞)–》 它表示對象的某種方法
定義類關鍵字 - - - class – 類名要求首字母大寫(駝峯命名法)
我們定義一個類實際就是把數據屬性和操作數據的函數綁定在一起
形成一個邏輯整體,即對象,將來任何時候要使用這種對象時複用
這個類就好了
class Student(object):
# 構造方法(又叫構造器/構造子 - constractor)
def __init__(self,name,age):
# 在這裏給對象綁定屬性
self.name = name
self._age = age
# 我們定義一個方法就代表,對象可以接收這個消息
# 對象的方法(函數)的第一個參數都是統一寫成**self**(c++裏面同樣寫法的是this)
# self代表了接收消息的對象 --即可以寫成 對象.消息 的形式
def study(self,course):
return '%s is studing %s...' % (self.name,course)
def __str__(self):
return 'name= %s,age=%d' % (self.name,self._age)
stu1 = Student('wills',15)
print(stu1)
print(stu1.study('math'))
在上面一段代碼中,Student表示類名,而stu1表示一個實際的對象.
stu1對象有自己的名字屬性‘wills’,以及自己的年齡屬性‘age’,還有自己的行爲study()函數。
在c++語言中還有private和public,protected關鍵字,表示屬性或者函數是否允許外界調用或者繼承,python裏面
沒有這種關鍵字,不過可以像self._age一樣在加一個下劃線表示保護,這裏我也理解不是很清楚,
究竟python是怎麼實現保護的,現在我只是知道了有這種用法。
STEP 2 . 調用構造方法構造學生對象
實際上是調用的Student類中的init(self,*args)方法實現的
......
stu1 = Student('wills',15)
print(stu1.study('math'))
STEP 3 . 給對象發消息
通過給對象發消息,從而讓對象完成某種工作
解決任何問題都是通過給對象發消息,然後讓對象去完成
這就是面向對象的思想,讓對象來做事
所有有了這個思想後,在我的理解裏面,有相同屬性和行爲的對象就可以構成一個類
至於先有類還是先有對象,我認爲應該是先有對象,因爲我們解決問題不管過程如何,最終結果
都是對象去執行完成的。之所以要定義類,只是爲了方便把這些有相同屬性的對象放在一起,如果出現了
同樣的問題,就可以不用重新想辦法,以前這個類的對象怎麼幹的,現在也怎麼幹就好了
class Student(object):
def __init__(self,name,age):
self.name = name
self.age = age
def study(self,course):
return '%s is studing %s...' % (self.name,course)
def __str__(self):
return 'name= %s,age=%d' % (self.name,self.age)
stu1 = Student('wills',15)
print(stu1)
print(stu1.study('math'))
name= wills,age=15
wills is studing math...