也就是當該類被實例化的時候就會執行該函數。那麼咱們就能夠把要先初始化的屬性放到這個函數裏面。以下程序:java
析構函數: python
上圖中的「__del__」就是一個析構函數了,當使用del 刪除對象時,會調用他自己的析構函數,另外當對象在某個做用域中調用完畢,在跳出其做用域的同時析構函數也會被調用一次,這樣能夠用來釋放內存空間。c++
__del__()也是可選的,若是不提供,則Python 會在後臺提供默認析構函數算法
—————————————————————————分割線——————————————————————————————————編程
一:函數c#
若是你須要在程序中重用代碼,---------定義函數。 def 函數名(參數)://todo函數
如:測試
輸出:this
也能夠將函數的參數定義爲默認參數,注:默認參數通常放參數的最後,如:spa
輸出:
二:類
類的定義應該是放在面向對象的標題裏,可是咱們通常函數定義在類裏面,從這個範圍來講,我在這記錄了類。
類和對象是面向對象編程的兩個主要方面。類:建立一個新類型,而對象是這個類的實例,類使用class關鍵字建立。類的域和方法被列在一個縮進塊中。
注意:在python語言中,無論什麼類型的實例都被看作對象,如整數也被做爲對象看待,它屬於int類,這和其餘語言c++,java把整數純粹做爲類型是不一樣的。
」域「的概念:
屬於一個對象或類的變量被稱爲域,其實就是類裏面定義的變量
域——類的變量和對象的變量
1:類的變量:由一個類的全部對象(實例)共享使用,只有一個類變量的拷貝,因此當某個對象對類的變量作了改動的時候,這個改動會反映到全部其餘的實例上。我理解爲:其實它就是一個類的全局變量,類實例化後的對象均可以調用該變量。
2:對象的變量: 由類的每一個對象/實例擁有。所以每一個對象有本身對這個域的一份拷貝,即它們不是共享的,在同一個類的不一樣實例中,雖然對象的變量有相同的名稱,可是是互不相關的。我理解的是:不一樣的對象調用該變量,其值改變後互不影響,跟C#的語法同樣,我還由於不理解第一點糾結了半天 !
屬於類級別的變量,在使用它的時候必定要帶上類型名字 好比 MyClass.count
屬於每一個對象級別的變量,在調用的時候必定要帶上self代表屬於當前對象。self.name
如:
輸出:
域(變量)和方法(函數)能夠合稱爲類的屬性
類的方法:
類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱,可是在調用這個方法的時候你不爲這個參數賦值,Python會提供這個值。這個特別的變量指對象自己,按照慣例它的名稱是self
。(相似於c#的this指針)
如:
__init__方法:屬於python語言的構造函數,一個類只能有一個__init__方法
__del__方法
:屬於python語言的析構函數,
它在對象消逝的時候被調用。
當對象再也不被使用時,__del__
方法運行,可是很難保證這個方法究竟在 何時 運行。若是你想要指明它的運行,你就得使用del
語句
三:模塊
模塊:若是你想要在其餘程序中重用不少函數--------定義模塊。其實就是不少的類型,不少的方法集合在一個或多個文件中,經過import ** 載入,相似於c#中的dll
模塊基本上就是一個包含了全部你定義的函數和變量的文件。爲了在其餘程序中重用模塊,模塊的文件名必須以.py
爲擴展名。
注意:每一個模塊都有本身的名稱__name__,__name__做爲模塊的內置屬性,它的做用就是檢測.py文件的調用方式,而後根據__name__作出相應的處理。
模塊有兩種調用方式:1:被import載入調用 2:直接使用
若是模塊直接執行,__name__="__main__"; 一般,此語句用於模塊測試中使用。
例如:定義一模塊名字爲MyModule.py
直接運行輸出:
經過其餘模塊調用:
調用模塊代碼:
間接調用運行輸出:
導入部分類,函數及變量,可使用from...import... 例如 from MyModule import ModuleClass