笨方法學Python 習題40 模組 類和物件

2021-08-15 03:09:04 字數 2939 閱讀 4342

python是一種物件導向biancheng(opp)語言。即,python中有一種叫做類(class)的結構,通過它可用一種特殊的方式構造軟體。

模組:1)包含函式和變數的python檔案;2)可以匯入這個檔案;3)匯入後就可使用.操作符訪問其中的函式和變數

# this goes in mystuff.py

# this is just a variable

tangerine = "living reflection of a dream"

### 如果mystuff.py沒有存放在python預設的目錄(尋找模組的地方),就需要告訴直譯器去**找

import sys, pprint  

pprint.pprint(sys.path)     # 可以檢視直譯器預設的路徑,你可以將你的模組放在site_packages目錄下(最佳)

import mystuff

print mystuff.tangerine

###若模組中內容修改了,需要重新匯入:

mystuff = reload(mystuff)###

可發現字典和模組使用方式有點類似,只是語法不同([鍵]和.鍵):

python裡乙個通用模式:1)類似「鍵=值」風格的容器;2)通過「鍵」的名稱獲取其中的值

python中的

類**結構可實現上述通用模式:通過類可將一組函式和資料放到乙個容器中,從而用.操作符訪問它們。

# 建立mystuff類

class mystuff(object):

def __init__(self):

self.tangerine = "and now a thousand years between"

使用類而非模組的原因:其重複建立很多出來(類可以多次例項化),這些例項之間也不會相互干涉;而模組一次匯入之後,整個程式中只有這麼乙份內容

類似於模組import的匯入操作,類的稱為「例項化」—即建立。當將乙個類「例項化」之後,就得到了乙個物件(object)

實現例項化的方法:像呼叫函式一樣呼叫乙個類

thing = mystuff()   

# thing就是mystuff類例項化後的乙個物件

print thing.tangerine

###還可以繼續例項化:

a = mystuff()   #a是mystuff類例項化後的乙個物件

b = mystuff()   #b也是mystuff類例項化後的乙個物件

第一行**就是例項化操作,和呼叫函式類似。但是python其實在背後做了一系列的工作(迷你匯入過程):

1) python看到mystuff()並且知道了它是你定義過的乙個類

2) python建立了乙個空物件,裡邊包含了你在該類中用def建立的所有函式

3) 然後python回去檢查你是否在裡邊建立了乙個__init__函式,若建立了,它就會呼叫這個函式,對你新建立的物件實現了初始化

4) 在mystuff的__init__函式裡,有乙個多餘的函式叫做self,它就是python建立的空物件,我們可對其進行類似模組、字典等的操作,為它設定一些變數進去

5) 上面將self.tangerine設成了一段歌詞,這樣我就初始化了該物件

6) 最後,python將這個新建的物件賦給乙個叫thing的變數,以供後面使用

此過程並不是拿來乙個類直接就用,而是將類作為乙個「藍圖」,然後用它建立和這個類有相同屬性的副本。

但本質上,類和物件與模組是完全不同的東西:

1. 類是像一種藍圖或者預定義的東西,通過它可以建立新的迷你模組

2. 例項化的過程相當於你建立了這麼乙個迷你模組,同時匯入了它

3. 結果建立的迷你模組就是乙個物件,你可以將它賦予給乙個變數並進行後續操作。

現有三種方法:

# dict style

# module style

print mystuff.tangerine

# class style

thing = mystuff()

print thing.tangerine

class song(object):

def __init__(self, lyrics):

self.lyrics = lyrics

def sing_me_a_song(self):

for s in self.lyrics:

print s

"i don't want to get sued",

"so i'll stop right there"])

bulls_on_parade = song(["they rally around the family",

"with pockets full of shells"])

bulls_on_parade.sing_me_a_song()

$ python ex40.py

i don't want to get sued

so i'll stop right there

they rally around the family

with pockets full of shells

1. 使用這種方式寫更多歌進去,確定弄懂了傳入的歌詞是乙個字串列表

2. 將歌詞放到另乙個變數中,然後在類中使用這個新定義的變數

3. 試著能不能給它加一些新功能,just do it  弄壞了也沒事

4. 網上搜尋「object oriented programming」(物件導向程式設計),給自己洗**

為什麼建立__init__或者別的類函式時需多加乙個self變數?

若不加self,那類中的cheese = 'frank'這樣的**意義就不明確了,它既可能指例項的cheese屬性,又可能是乙個叫做cheese的區域性變數。而有了self.cheese = 'frank'就可清楚知道是指例項的屬性self.cheese

笨方法學Python 習題0

第一天學習,教材是中文第四版,完全零基礎 之前電腦上安裝了anaconda 所以現在是這個狀態,不知道python 3在之後的學習有沒有什麼問題,先這樣再說吧 ctrl z撤銷,回到python之前 windows裡terminal 就是指powershell 建立目錄 mkdir 進入目錄 cd ...

笨方法學python 習題4 5 6 7 8

習題4 space in a car中 car是假想空格字元 附加題 我的3的版本裡只用4沒有問題,我的猜想是2中如果除數都是int,答案會是去掉小數剩下的部分 比如說如果最後答案是3.75,python會顯示3,而實際上我們應該得出4這個答案,就不匹配了。是assignment,equal to ...

《 笨方法學 Python 》 習題 6 9

習題 6 字串和文字 x there are d types of people.10 binary binary do not don t 如果在字串中通過格式化字元放入多個變數,需要將變數放到 中,變數之間用逗號隔開 y those who know s and those who is s.b...