python學習筆記-類和實例

面向對象最重要的概念應該就是類(class)和實例(instance)了。記得之前學習java的時候,有一個比較簡單的例子來解釋類和實例。
在汽車製造過程當中,咱們須要先設計圖紙,讓後再根據圖紙來製造實際的汽車。類就至關於圖紙,而實例則是實際的汽車。一張圖紙能夠造出不少汽車,剛造出的汽車是同樣的,可是後續能夠進行個性化的改裝。
python能夠根據class在內存中建立多個實例,每一個實例能夠獨立地添加和修改方法和屬性。java

定義類

class Car(Vehicle):
    pass

咱們來講明一下,class關鍵詞來聲明這是一個類,緊接着就是類名。後接一個(),裏面是該類所繼承的父類。
在2.7中,一個類若是沒有繼承其它類,則能夠另其繼承object類。那麼這樣定義的就是一個new style object,即新式類。
若是不聲明繼承自何類,那麼定義的則是經典類。
例如:python

# 定義新式類
class Student(object):
    pass

# 定義經典類    
class Student2:
    pass

新式類和經典類的區別出了寫法不同外,還存在其它區別:函數

  1. 新式類的類型是type,經典類的類型是classobj。新式類的出現就是爲了將全部類的類型統一爲type學習

  2. 對於多繼承,繼承搜索的順序發生了改變。(這裏不懂)設計

  3. 默認屬性發生了改變code

  4. 可能還有其它對象

Python 3.x以上版本全部的類均是新式類,不須要顯式地繼承object繼承

__init__構造函數

類中能夠定義一個構造函數__init__。構造函數的意思就是類在建立的時候會執行的函數。__init__函數的第一參數是self,指實例自己。__init__函數還能夠有多個參數,這些參數須要在實例建立的時候傳入。
例如:內存

class Student(object):
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

__init__函數常常用於對實例屬性進行初始化。get

類中的函數

類中的函數也叫作方法。方法與其它函數有所區別,即方法的第一個參數永遠是self,即實例自己。
建立實例後,在調用方法是,並不須要傳入實例,由於編譯器爲自動爲咱們加入實例。例如:

class Student(object):
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    # 方法的第一個參數是self
    def print_name(self):
        print self.name

student = Student("charlie", 20, 'male')

#調用函數的時候,並不須要手動傳入實例student
student.print_name()

兩個特殊的函數

classmethod和staticmethod。
簡單粗淺地說,能夠理解成:

  • classmethod的是定義一些僅僅跟類有關,可是跟實例無關的方法。

  • staticmethod是一些跟類有關係的功能,可是其具體的實現卻又不須要用到類或者實例的參與。staticmethod叫作靜態方法。

更多解釋和例子,能夠閱讀知乎上的回答:https://www.zhihu.com/questio...

類的屬性

屬性就更加好理解了。
例如咱們設計一張製造冰箱的圖紙,咱們除了定義冰箱的功能(類的方法)外,還須要定義冰箱的顏色、長、寬、高、等屬性。類也同樣。

class Fridge(object):
    color = 'yellow'
    height = 120
    width = 30
    food = 'fish'

    def storage(self):
        print "keep %s fresh" % self.food

fridge = Fridge()
fridge.storage()

類的封裝性

上面咱們講了這麼多類的特性,其實類就是一個數據類型。咱們把一種數據類型封裝成一個類。
例如一個學生具備姓名、年齡、性別等屬性,另外他也有書寫姓名、讀書識字等功能。咱們能夠把一個Student全部的屬性和功能當作一個總體,那麼這就是一個類。這個類就是與python中內置的其它數據類型同樣的數據類型,只不過這是咱們自定義的,叫Student。

建立實例

建立實例的方法十分簡單。即:

student = Student(括號內傳入在__init__函數中定義的參數)

python是一門動態語言。建立好的實例能夠自由地添加屬性。在類中聲明的read-only的屬性,在實例中不能del。在實例中經過構造函數添加的或者在類外動態添加的屬性能夠del。
類中的read-only屬性只能經過類屬性的形式刪除。

class Fridge(object):
    color = "yellow"
    width = 20

    def __init__(self, height):
        self.height = height

    def storage(self):
        print "keep %s fresh"

fridge = Fridge(100)
fridge.name = "Haier"

del fridge.color # AttributeError 報錯
del fridge.height
del fridge.name
del Fridge.width

怎麼給實例或類動態添加方法?先挖個坑,學習了再寫。

相關文章
相關標籤/搜索