笨方法學Python——習題40


之前例子講過關於字典、列表、字符串、元組,按書中所述,其實這些已經足夠寫一些代碼,但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__ 就是系統內的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM