面向對象的思想理解

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...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章