零基礎學python 類的細節

2021-06-28 00:40:15 字數 2668 閱讀 4675

前面對類的有關內容已經描述不少了,其實話題遠遠沒有結束,不過對於初學者,掌握這些已經算是入門,在以後的實踐中,還需要進行體會和感悟。

大家對oop有不同看法,所謂工程派和學院派看法不一致。從應用的角度看,工程派的觀點是值得推薦的,那就是:不用太在意內部是怎麼工作的,只要能夠解決眼下的問題即可。但是,對於學習者而言,如果僅僅停留在工程派的層面(特別提醒,上述幾位朋友都是工程派的大俠,他們可不是簡單地能夠使用,其實是更高層次的「無招勝有招」),學習者可能感覺有點不透徹。所以,學習者,特別是初學者,要知道一些內部原因,但是也別為了鑽研內部原因而忘記了應用的目的。看來兩者協調還是乙個難辦的事情。不用著急,隨著實踐的深入,就逐漸有體會了。

下面我根據mark lutz的《learning python》中的「大師眼中的oop」,列一些使用oop的常見原因。

不管怎麼樣,類是乙個非常重要的東西,看官在學習的時候,一定要多加運用。

此外,對於python2來說,還有乙個叫做「新式類」(new-style)的東西,這個對應於前面講過的類,那麼前面講過的類就稱為「經典」(classic)類。但是,對於python3來講,沒有這種區別,二者融合。只是在python2中,兩個是有區別的。本教程在基礎部分,依然不講授新式類的問題,如果看官有興趣,可以自己在google中查詢有關資料,也可以隨著本課程深入,到下乙個階段來學習。

看官是否還記得,在學習類的方法的時候,提到過,類的方法就是函式,只不過這個函式的表現有點跟前面學過的函式不一樣,比如有個self。當然,也不是必須要有的,下面看官就會看到沒有self的。既然方法和函式一樣,本質上都是函式,那麼,函式那部分學習的時候已經明確了:函式是物件,所以,類方法也是物件。正如剛才說的,類的方法中,有的可以有self,有的可以沒有。為了進行區別,進一步做了這樣的定義:

>>> class myclass:

... def foo(self,text):

... print text

...

可以用下面的方式呼叫例項方法

>>> a = myclass()       #建立類例項

>>> a.foo('qiwsir.github.io') #呼叫例項方法

qiwsir.github.io

>>> a.foo

>

在這個例項方法呼叫的時候,其資料傳遞流程,在《編寫類之二方法》中有一張圖,圖中顯示了,上述的呼叫方法中,其實已經將例項名稱a傳給了self,這就是呼叫繫結例項方法物件,有self。

上面的呼叫過程,還可以這樣來實現:

>>> a = myclass()

>>> x = a.foo #把例項a和方法函式foo繫結在一起

>>> x

>

>>> x("qiwsir.github.io")

qiwsir.github.io

在上面的呼叫中,其實相當於前面的呼叫過程的分解動作。即先將例項a和方法函式foo繫結在一起,然後賦值給x,這時候x就相當於乙個簡單函式一樣,可以通過上述方式傳入引數。這裡將例項和方法函式繫結的方式就是運用點號運算(object.method_function)

所謂類方法物件,就是不通過例項,而是用類進行點號運算來獲得方法函式(classname.method_function)

>>> a = myclass()

>>> y = myclass.foo #這裡沒有用類呼叫

>>> y

這樣的呼叫,就得到了無繫結方法物件,但是,呼叫的時候必須傳入例項做為第一引數,如下

>>> y(a,"qiwsir.github.io")

qiwsir.github.io

否則,就報錯。請看官特別注意報錯資訊

>>> y("qiwsir.github.io")

traceback (most recent call last):

file "", line 1, in typeerror: unbound method foo() must be called with myclass instance as first argument (got str instance instead)

>>>

在程式設計實踐中,似乎用例項方法呼叫更多一下。

在寫程式的時候,必須要寫必要的文字說明,沒別的原因,除非你的**寫的非常容易理解,特別是各種變數、函式和類等的命名任何人都能夠很容易理解,否則,文字說明是不可缺少的。

在函式、類或者檔案開頭的部分寫文件字串說明,一般採用三重引號。這樣寫的最大好處是能夠用help()函式看。

"""this is python lesson"""

def start_func(arg):

"""this is a function."""

pass

class myclass:

"""thi is my class."""

def my_method(self,arg):

"""this is my method."""

pass

這樣的文件是必須的。

當然,在程式設計中,有不少地方要用「#」符號來做注釋。一般用這個來注釋區域性。

類其實並沒有結束,不過本講座到此對類暫告一段。看官要多實踐。

零基礎學Python

零基礎學python 1 1 python是一門指令碼語言 2 python的優勢 1 語法和結構比較簡單,易入門 2 能夠跨平台使用 3 應用範圍廣,設計到作業系統 3d動畫 web 雲計算,企業應用等多方面。3 idle 是乙個python shell,類似於windows的cmd視窗 4 pr...

零基礎學python 一

每次學習語言總是要了解其背景python也不例外。首先python的創始人為 guido van rossum 1989年聖誕節期間,在 阿姆斯特丹 guido為了打發聖誕節的無趣,決心開發乙個新的指令碼 解釋程式 做為abc 語言的一種繼承。看看人家外鬼子程式設計師 哎不得不佩服。他在業餘時間開發...

零基礎學Python筆記

alt n 最遠一條語句 alt p 最近一條語句 tab的兩個作用 1 縮排 2 補足 isinstance str1,str 判斷型別 s為字串 s.isalnum 所有字元都是數字或者字母,為真返回 ture,否則返回 false。s.isalpha 所有字元都是字母,為真返回 ture,否則...