PYTHON小白 第十三天

2021-10-01 10:41:03 字數 3006 閱讀 4923

python小白:第十三天

1、 類和物件

類是物件導向的重要內容,可以把類當成一種自定義型別,可以使用類來定義變數,也可以使用類來建立物件。

1.1 定義類

在物件導向的程式設計過程中有兩個重要概念:類(class)和物件(object,也被稱為例項,instance),其中類是某一批物件的抽象,可以把類理解成某種概念;物件才是乙個具體存在的實體。

python定義類的簡單語法如下:

類名只要是乙個合法的識別符號即可,但這僅僅滿足的是python的語法要求:如果從程式的可讀性方面來看,python類名必須是由乙個或多個有意義的單詞連綴而成的,每個單詞首字母大寫,其他字母全部小寫,單詞與單詞之間不要使用任何分隔符。

從上面定義來看,python定義有點像函式定義,都是以冒號(:)作為類體的開始,以統一縮排的部分作為類體的。區別在於只是函式定義使用def關鍵字,而類定義則使用class關鍵字。

python的類定義由類頭(指class關鍵字和類名部分)和統一縮排的類體構成,在類體中最主要的兩個成員就是類變數和方法,如果不為類定義任何類變數和方法,那麼這個類就相當於乙個空類,如果空類不需要其他可執行語句,則可使用pass語句作為佔位符。

類中各成員之間的定義順序沒有任何影響,各成員之間可以相互呼叫。

python類所包含的最重要的兩個成員就是變數和方法,其中類變數屬於類本身,用於定義該類本身所包含的狀態數;而例項變數則屬於該類的物件,用於定義物件所包含的狀態資料;方法則用於定義該類的物件的行為或功能實現。

python是一門動態語言,因此它的類所包含的類變數可以動態增加或刪除–程式在類體中為新變數賦值就是增加類變數,程式也可在任何地方為己有的類增加變數;程式可通過del語句刪除已有類的類變數。

類似的是,python物件的例項變數也可以動態增加或刪除–只要對新例項變數賦值就是增加例項變數,因此程式可以在任何地方為己有的物件增加例項變數;程式可通過del語句刪除己有物件的例項變數。

在類中定義的方法預設是例項方法,定義例項方法的方法與定義函式的方法基本相同,只是例項方法的第乙個引數會被繫結到方法的呼叫者(該類的例項)–因此例項方法至少應該定義引數,該引數通常會被命名為self。

在例項方法中有乙個特別的方法:init,這個方法被稱為構造方法。構造方法用於構造該類的物件,python通過呼叫構造方法返回該類的物件(無須使用new)。

構造方法是乙個類建立物件的根本途徑,因此python還提供了乙個功能:如果開發者沒有為該類定義任何構造方法,那麼python會自動為該類定義乙個只包含乙個self引數的預設的構造方法。

python的類大致有如下作用:

 定義變數

 建立物件

 派生子類

1.2 物件的產生和使用

建立物件的根本途徑是構造方法,呼叫某個類的構造方法即可建立這個類的物件,python無須使用new呼叫構造方法。

在建立物件之後,接下來即可使用該物件了。python的物件大致有如下作用。

 操作物件的例項變數(包括訪問例項變 的值、新增例項變數、刪除例項變數)。

 呼叫物件的方法。

物件訪問方法或變數的語法是:物件.變數|方法(引數)。在這種方式中,物件是主調者,用於訪問該物件的變數或方法。

定義乙個類就是為了重複建立該類的物件,同乙個類的多個物件具有相同的特徵,而類則定義了多個物件的共同特徵。從某個角度來看,類定義的是多個物件的特徵,因此類不是乙個具體存在的實體,物件才是乙個具體存在的實體。

1.3 物件的產生和使用

為p物件動態增加例項變數,只要為它的新變數賦值即可;也可以動態刪除例項變數,使用del語句即可刪除。

python是動態語言,當然也允許為物件動態增添方法。但需要說明的是,為p物件動態增加的方法,python不會自動將呼叫者自動繫結到第乙個引數(即使將第乙個引數命名為self也沒用)。

對於動態增加的方法,python不會自動將方法呼叫者繫結到它們的第乙個引數,因此程式必須手動為第一引數傳入引數值。

如果希望動態增加的方法也能自動繫結到第乙個引數,則可借助於types模組下的methodtype進行包裝。

1.4 例項方法和自動繫結self

對於在類體中定義的例項方法,python會自動繫結方法的第乙個引數(通常建議將該引數名為self),第乙個引數總是指向呼叫該方法的物件。根據第乙個引數出現位置的不同,第乙個引數所繫結的物件略有區別。

 在構造方法中引用該構造方法正在初始化的物件。

 在普通例項方法中引用呼叫引用該方法的物件。

由於例項方法(包括構造方法)的第乙個self引數會自動繫結,因此程式在呼叫普通例項方法、構造方法時不需要為第乙個引數傳值。

self引數(自動繫結的第乙個引數)最大的作用就是引用當前方法的呼叫者,比如前面介紹的在構造方法中通過self該物件增加例項變數。也可以在乙個例項方法中訪問該類的另乙個例項方法或變數。

方法的第乙個引數所代表的物件是不確定的,但它的型別是確定的–它所代表的只能是當前類的例項;只有當這個方法被呼叫時,它所代表的物件才被確定下來,誰在呼叫這個方法,方法的第乙個引數就代表誰。

上面**的run()方法中的self代表該方法的呼叫者,誰在呼叫run()方法,那麼self就代表誰。因此該方法表示:當乙個dog物件呼叫run()方法時,run()方法需要依賴它自己的jump()方法。

當python物件的乙個方法呼叫另乙個方法時,不可以省略self。此外,在構造方法中,self引數(第乙個引數)代表該構造方法正在初始化的物件。

上面程式中第一行粗體**以方法形式呼叫user物件的test()方法,此時方法呼叫者當然會自動繫結到方法的第乙個引數(self引數);程式中第二行粗體字**以函式形式呼叫user物件的test()方法,看上去此時沒有呼叫者了,但程式依然會把實際呼叫者繫結到方法的第乙個引數,因此上面程式中兩行粗體字**的輸出結果完全相同。

self引數作為物件的預設引用時,程式可以像訪問普通變數一樣來訪問這個self引數,甚至可以把self引數當成例項方法的返回值。

從上面程式中可以看出,如果在某個方法中把self引數作為返回值,則可以多次連續呼叫同乙個方法,從而使得**更加簡潔。但是這種self引數作為返回值的方法可能會造成實際意義的模糊,例如上面的grow方法用於表示物件的生長,即age屬性的值加1,實際上不應該有返回值。

學習Python 第十三天

二叉樹 一,名詞 根邊 樹葉 葉子 沒有兒子 兄弟 具有相同父親的節點 祖父和孫子 路徑路徑的長 深度 從根到該點 高 從該點到葉子 祖先 後裔 真祖先 真後裔 二,樹的實現 class treenode def init self,data,firstchild,nextsibling self....

第十三天 練兵

問 昨天您講的很驚心動魄。這樣快節奏的配合確實非常完美,很羨慕。但要形成這樣的結果必須我們之間配合需要非常流暢,我們有什麼方法可以促成這樣的氛圍?答 練兵。如果一開始就進入業務系統功能的設計開發,業務組長對業務還沒有很深的吃透,這樣倉促上陣功能不但連上一版不如,而且為了補課,軟體不斷修改,什麼都亂了...

2020 7 18第十三天

1.學習了static關鍵字 靜態變數,靜態方法以及靜態模組 1 public class vardemo 9 1 public class staticblockdemo 5public staticblockdemo 8public static void main string args 12...