Python類的構造函數__init__(self)和析構函數__del__詳解
- 2019 年 10 月 25 日
- 筆記
一、構造方法__init__(self)
__init__()方法是一種特殊的方法,被稱為類的構造函數或初始化方法,當創建了這個類的實例時就會調用該方法。一般用來對實例的屬性進行初使化,如果不提供,Python 會給出默認的__init__方法。
class testClass:
def __init__(self, name, gender): //定義 __init__方法,這裡有三個參數,這個self指的是一會創建類的實例的時候這個被創建的實例本身(例中的testman),你也可以寫成其他的東西,比如寫成me也是可以的,這樣的話下面的self.Name就要寫成me.Name。
self.Name=name //通常會寫成self.name=name,這裡為了區分前後兩個是不同的東東,把前面那個大寫了,等號左邊的那個Name(或name)是實例的屬性,後面那個是方法__init__的參數,兩個是不同的)
self.Gender=gender //通常會寫成self.gender=gender
print('hello') //這個print('hello')是為了說明在創建類的實例的時候,__init__方法就立馬被調用了。
testman = testClass('neo,'male') //這裡創建了類testClass的一個實例 testman, 類中有__init__這個方法,在創建類的實例的時候,就必須要有和方法__init__匹配的參數了,由於self指的就是創建的實例本身,self是不用傳入的,所以這裡傳入兩個參數。這條語句一出來,實例testman的兩個屬性Name,Gender就被賦值初使化了,其中Name是 neo,Gender 是male。
class testClass (object): def __init__(self, name, gender):#構造函數或類的初始化,創建實例時會被調用 self.Name = name self.Gender = gender print ('hello') testman = testClass ('neo', 'male') print (testman.Name) print (testman.Gender) class tetsClass2 (object): def __init__(me, name, gender):#構造函數或類的初始化,創建實例時會被調用 me.gender = gender print ("hello2") testman2 = tetsClass2 ('neo', 'male') print (testman2.name) print (testman2.gender) "C:Program FilesPython35python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py hello neo male hello2 neo male Process finished with exit code 0
二、析構函數__del__
__del__ ()
,被稱為類的析構函數,__del__()
在對象消逝的時候被調用,當對象不再被使用時,__del__()
方法運行。
當使用del 刪除對象時,會調用他本身的析構函數,另外當對象在某個作用域中調用完畢,在跳出其作用域的同時析構函數也會被調用一次,這樣可以用來釋放記憶體空間。 __del__()也是可選的,如果不提供,則Python 會在後台提供默認析構函數
如果要顯式的調用析構函數,可以使用del關鍵字:del obj
class Test(object): name='小雷' address='上海市' def __init__(self,name,age): self.name=name self.age=age print('這裡是構造方法') def test1(self): print(self.name,self.age) def __del__(self): print('這裡是析構函數,清理了') def test2(self): print(self.name, Test.address) def test3(self): print('準備被清理的') Test1=Test('小張',22) Test1.test1() Test1.test2() Test1.test3() Test2=Test('王大大',33) Test2.test1() Test2.test2() del Test2.test3 Test2.test3() #試驗證明 #1、析構函數__del__等所有程式執行完才會執行 #2、被del的方法,無法再被調用 #3、析構函數會自動被調用 #4、del 方法,會調用析構函數 "C:Program FilesPython35python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py Traceback (most recent call last): File "C:/Users/wangli/PycharmProjects/Test/Test/test.py", line 89, in <module> del Test2.test3 AttributeError: test3 這裡是構造方法 小張 22 小張 上海市 準備被清理的 這裡是構造方法 王大大 33 王大大 上海市 這裡是析構函數,清理了 這裡是析構函數,清理了