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  王大大 上海市  這裡是析構函數,清理了  這裡是析構函數,清理了