之前例子講過關於字典、列表、字符串、元組,按書中所述,其實這些已經足夠寫一些代碼,但Python屬於面向對象的編程語言,本節所講的類,是必須要掌握的,雖然現在有些懵逼
1 class Song(object): 2 3 def __init__(self, lyrics): 4 self.lyrics = lyrics 5 6 def sing_me_a_song(self): 7 for line in self.lyrics: 8 print line 9 10 happy_bday = Song(["Happy birthday to you", 11 "I don't want to get sued", 12 "So I'll stop right there"]) 13 14 bulls_on_parade = Song(["They rally around the family", 15 "With pockets full of shells"]) 16 17 happy_bday.sing_me_a_song() 18 19 bulls_on_parade.sing_me_a_song()
1 # -*- coding:utf-8 -*- 2 class Ren: 3 # 有一個(object),這是一個繼承,就是繼承系統的object這個類,擁有這個類的所有屬性和方法,如果不需要,就不用寫,寫成 Ren 或者 Ren() 也可以 4 5 name = "人" 6 high = "一人高" 7 wight = "一人重" 8 __money = "我有很多錢" 9 # 這幾個是局部屬性,僅限於外部調用使用,如果通過類里的變量調用是無效的 10 # —__money 為私有屬於,不能被類以外的函數調用,但如果用類里其他函數調用之后,在外部打印函數,就可以顯示,這樣能保證更好的封裝和私密性 11 def run(self): 12 print "跑步" 13 print self.name 14 print self.__money 15 # 如果必須加self才能從內部調用屬性,否則調用的是全局,也就是外部的屬性,需要在外部重新定義 16 zhangsan = Ren() #這就是實例化的對象 17 18 # print zhangsan # <__main__.Ren instance at 0x1099edbd8> 19 # 意指張三為這個類別當中的一個實例,不能直接打印 20 21 # if __name__ == '__main__': 22 # if __name__ == __main__ 實例化對象 23 # 這句話的意思就是說如果上面的類被調用,下面的函數才會執行,而如果說整個函數作為模塊被調用,則不執行!!!這里暫時沒搞懂 24 25 print zhangsan.name 26 # 這樣寫就是把人這個類的整體的名稱賦值給了張三,那最后的結果就是張三的名稱叫“人”,肯定是不對的,所以需要通過對 name來進行重新賦值,在下方 27 28 zhangsan.name = "張三" # 重新賦值 29 print zhangsan.name 30 # 這個時候得到的就是張三這個人的單獨名稱,對於人這個類並沒有影響 31 32 # print zhangsan.money # Ren instance has no attribute 'money 33 # 由於人這個類中沒有money的屬性,所以打印無效果 34 zhangsan.money = "一百萬" 35 print zhangsan.money 36 # print zhangsan.__money 37 # 像這里,由於—__money是私有屬性,被類中的run函數調用后,在外部打印run函數就可以,但在這里直接調用,就不可以 38 39 # print zhangsan.__money # 私有屬性,外部無法調用 40 # 對象是從類別中實例化出來的,所以會具有類的一些特性,但張三在這里是單獨的個體,人的類不可能都有錢,對象與類不同,所以也可以單獨賦值 41 42 zhangsan.run() 43 44 print Ren.__dict__ # 這個就是內置屬性的調用了
描述及方法,類似球的形狀,球的玩法
比如汽車,如果用面向對象的方式解釋,
我想你帶我去哪哪,直接開車去就可以了
而如果用面向過程的編程方法,就需要把打開車門、插入車鑰匙,打火等等全部描述一遍
這里使用面向對象的方式把對於“汽車”的描述及方法封裝為類,直接使用即可
比如你定義了四個函數,都是針對於數據庫的操作一類功能,就可以把他們定義為一個類,最主要的作用,就是封裝代碼
面向對向的三大特色:封裝、繼承、多態
1,用class定義類
2,類名首字母大寫,如果類名為兩個詞組,那這兩個連續的詞組首字母均需要大寫
3,一般函數定義都是定義單獨或者說簡單功能的,比如定義人這個類,人會說話會走路,長的高、瘦,這些對於人類的描述以及人能夠做的行為,可以定義為一個類,把需要用到的變量和函數放到一起的操作,叫封裝
4,self 行參,在類中定義函數必須有這個,負責傳遞當前類中的內置的一些屬性及方法,實際上就是接收自己這個類中的參數,但其實不需要給他參數
5,從一個類別當中生成對象的過程叫做實例化,當一個對象創建好后,
有三個特性:對象的句柄(俗稱變量的名稱)、屬性(成員變量)和方法(成員函數)
instance(實例),類別當中的一個實例,也就是所說的對象
6,類寫義時會有一個(object),這是一個繼承,就是繼續之前系統的object這個類,如果不繼續 ,就不需要寫,看作是一個單獨的 Ren 的類即可
7,類的屬性分公有屬性、私有屬性、內置屬性,
公有屬性就在可以被類外部訪問,也可以被內部調用的屬性
私有屬性樣式為 __x 可以被內部調用,外部無法直接調用。
內置屬性樣式為 __x__ 就是系統內的