Python的模組 類 物件

2021-08-27 16:59:01 字數 3951 閱讀 3150

python 是一種「物件導向程式設計語言(object oriented programming language)」。這個說法的意思是說,

python 裡邊有一種叫做 class 的結構,通過它你可以用一種特殊的方式構造你的軟體。通過使用

class(類),你可以讓你的程式架構更為整齊,使用起來也會更為乾淨——至少理論上應該是這樣的。

現在我要教你的是物件導向程式設計的起步知識,我會用你學過的知識向你介紹物件導向程式設計、類、以及對

象。問題是變相物件程式設計(簡稱oop)本身就是個奇怪的東西,你只有努力去弄懂這一章的內容,好好

寫**,然後到下一章節的習題,我就能把oop像釘釘子一樣釘到你腦子裡了。

現在就開始吧。

模組和字典差不多

你知道怎樣建立和使用字典這個資料型別,這是一種將一種東西對應到另外一種的方式。這意味著如果

記住這個「從y獲取x」的概念,現在再來看看模組(module),你已經建立和使用過一些模組了,你已

經了解了它們的一些屬性:

1. 模組是包含函式和變數的 python 檔案。

2. 你可以 import 這個檔案。

3. 然後你可以使用 『.』 操作符訪問到模組中的函式和變數。

# this goes in mystuff.py

import mystuff

我還可以放乙個叫做 tangerine 的變數到模組裡邊:

# this is just a variable

tangerine = "living reflection of a dream"

一樣的我還是可以訪問到這個變數:

import mystuff

print mystuff.tangerine

回到字典的概念,你會發現這和字典的使用方式有點相似,只不過語法不同而已,我們來比一比:

mystuff.tangerine # same thing, it's just a variable

也就是說,python 裡邊有這麼乙個通用的模式:

1. 拿乙個類似 key=value 風格的資料容器

2. 通過 key 的名稱獲取其中的 value

對於字典來說,key 是乙個字串,獲得值的語法是 [key] 。對於模組來說,key是函式或者變數的名

稱,而語法是 .key 。除了這個,它們基本上就沒什麼區別了。

模組和字典差不多

模組還可以用一種方法去理解:你可以把它們當做一種特殊的字典,通過它們你可以儲存一些 python

**,而你可以通過 『.』 操作符訪問到這些**。python 還有另外一種**結構用來實現類似的目的,

那就是 類(class) ,通過類,你可以把一組函式和資料放到乙個容器中,從而用 『.』 操作符訪問到它們。

如果我要用建立 mystuff 模組的方法來建立乙個類,那麼方法大致是這樣的:

class mystuff(object):

def __init__(self):

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

這個和模組比起來有些複雜,確實,比起模組來,這裡的確做了很多事情,不過你應該能大致看出來,

恐怕是 __init__() 函式,還有就是設定 tangerine 變數時用了 self.tangerine 這樣的語法。

使用類而非模組的原因如下:你可以拿著上面這個類,重複建立出很多出來,哪怕是一次一百萬個,它

們也不會互相干涉到。而對於模組來說,當你一次 import 之後,整個程式裡就只有這麼乙份內容,只有

鼓搗得很深才能弄點花樣出來。

不過在弄懂這個之前,你要先理解「物件(object)」是什麼東西,以及如何使用 mystuff 達到類似

import mystuff 實現的結果。

物件相當於迷你版的 import

如果說類和迷你模組差不多,那麼對於類來說,也必然有乙個類似 import 的概念。這個概念名稱就是

「例項(instance)」。這只是一種故作高深的叫法而已,它的意思其實是「建立」。當你將乙個類「例項

化」以後,你就得到了乙個 物件(object) 。

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

thing = mystuff()

print thing.tangerine

第一行**就是「例項化」操作,這和呼叫函式很相似。然而,當你進行例項化操作時,python 在背後

做了一系列的工作,這裡我針對上面的**詳細解釋一下:

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

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

呼叫這個函式,從而對你的空物件實現了初始化。

4. 在 mystuff 中的 __init__ 函式裡,我們有乙個多餘的函式叫做 self ,這就是 python 為我們創

建的空物件,而我可以對它進行類似模組、字典等的操作,為它設定一些變數進去。

5. 在這裡,我把 self.tangerine 設成了一段歌詞,這樣我就初始化了該物件。

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

這就是當你像呼叫函式一樣呼叫類的時候, python 完成這個「迷你 import」的過程。記住這不是拿來

乙個類就直接用,而是將類當做乙個「藍圖」,然後用它建立和這個類有相同屬性的拷貝。

提醒你一點,我的解釋和 python 的實際原理還是有一點小小的出入,只不過在這裡,基於你現有的關

於模組的知識,我也暫時只能這麼解釋了。事實上類和物件和模組是完全不同的東西。如果我實實在在

地跟你講的話,我大概會說出下面的這些東西:

? 類就像一種藍圖、或者一種預定義的東西,通過它可以建立新的迷你模組。

? 例項化的過程相當於你建立了這麼乙個迷你模組,而且同時 import 了它。

? 結果生成的迷你模組就是乙個物件,你可以將它賦予乙個變數並進行後續操作。

而通過這一系列的操作,類和物件和模組已經很不同了,所以這裡的內容只是為了讓你理解類的概念而 已。

從東西裡獲取東西

現在我有三種方法可以從某個東西裡獲取它的內容:

# dict style

# module style

print mystuff.tangerine

# class style

thing = mystuff()

print thing.tangerine

第乙個類的例子

你應該開始注意到這三種 key=value 的容器類資料,而且有一些問題要問。先別問,下面一講會讓你了

解物件導向程式設計的一些專有詞彙。在這一節裡,我只要求你寫**並讓它執行起來,有了經驗才能繼續

前進。class song(object):

def __init__(self, lyrics):

self.lyrics = lyrics

def sing_me_a_song(self):

for line in self.lyrics:

print line

"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()

你應該看到的結果

i don't want to get sued

so i'll stop right there

they rally around the family

with pockets full of shells

python類 模組 包

通常包總是乙個目錄,可以使用import匯入包,或者from import來匯入包中的部分模組。包目錄下為首的乙個檔案便是 init py。然後是一些模組檔案和子目錄,假如子目錄中也有 init py 那麼它就是這個包的子包了。在建立許許多多模組後,我們可能希望將某些功能相近的檔案組織在同一資料夾下...

Python的類與物件

很多人都知道python是一門物件導向的程式語言,那麼到底是如何物件導向呢,其實對於python來說,萬物皆物件,但是還有很重要的一點,得有類 物件 屬性 方法 類的語法 class class fun def name self,name self.name name def prints sel...

Python的類和物件

實現步驟 1.確定職責 2.物件內部封裝呼叫不同方法 多個 3.不同物件呼叫不同的方法 類和物件 類 模板,物件都是根據這個模板建立出來的 類只需要有乙個,物件可以有多個 類有屬性和方法 1.類名 駝峰命名,不加下劃線 studentinfo 2.屬性 3.方法 示例 class cat def e...