Python 構造函數、 Python 析構函數、Python 垃圾回收機制


構造函數與析構函數
構造函數:
用於初始化類的內容部狀態,Python提供的構造函數式 __init__();

也就是當該類被實例化的時候就會執行該函數。那么我們就可以把要先初始化的屬性放到這個函數里面。如下程序:

    

__init__()方法是可選的,如果不提供,Python 會給出默認的__init__方法
一般數據的獲取需要定義的get和set方法
 

析構函數: 

上圖中的“__del__”就是一個析構函數了,當使用del 刪除對象時,會調用他本身的析構函數,另外當對象在某個作用域中調用完畢,在跳出其作用域的同時析構函數也會被調用一次,這樣可以用來釋放內存空間。

__del__()也是可選的,如果不提供,則Python 會在后台提供默認析構函數

如果要顯式的調用析構函數,可以使用del關鍵字,方式如下:
del對象名
 
 
垃圾回收機制
Python 采用垃圾回收機制來清理不再使用的對象;Python 提供gc模塊釋放
不再使用的對象,Python 采用‘引用計數’ 的算法方式來處理回收,
即:當某個對象在其作用域內不再被其他對象引用的時候,Python 就自動清除對象;
Python 的函數collect()可以一次性收集所有待處理的對象(gc.collect())

—————————————————————————分割線——————————————————————————————————

一:函數

  如果你需要在程序中重用代碼,---------定義函數。 def 函數名(參數)://todo

  如:

  輸出:

   也可以將函數的參數定義為默認參數,注:默認參數一般放參數的最后,如:

  

輸出:

二:類

類的定義應該是放在面向對象的標題里,但是我們一般函數定義在類里面,從這個范圍來說,我在這記錄了類。

類和對象是面向對象編程的兩個主要方面。類:創建一個新類型,而對象是這個類的實例,類使用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM