第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁 慕課教程 Python 進階應用教程 Python 進階應用教程 03 Python類的構造方法、析構方法、實例方法

Python 類的構造方法、析構方法、實例方法

上一個小節(jié)我們學習了 Python 的類屬性和實例屬性的知識點,這個小節(jié)我們還是會學習關于類的知識。這節(jié)課我們會學習類的構造方法、析構方法和實例方法。

1. 實例方法

1.1 定義

實例方法是用于訪問對象實例屬性的方法,語法如下:

class:
    def 實例方法(self):
        self.屬性

實例方法定義在類中,它的第一個參數 self 指向調用該方法的對象,在實例方法中通過 “self.屬性” 訪問對象的實例屬性。

1.2 例子

每個人具有 name 和 age 的屬性,創(chuàng)建一個類 Person,在類 Person 中定義實例方法 introduce 訪問對象的屬性,代碼示例如下:

class Person:
    def introduce(self):
        print('name = %s, age = %d' % (self.name, self.age))

tom = Person()    
tom.name = 'tom'
tom.age = 10
tom.introduce()

jerry = Person()
jerry.name = 'jerry'
jerry.age = 20
jerry.introduce()
  • 在第 1 行,定義了類 Person
    • 在第 2 行,定義了類 Person 的方法 introduce,introduce 的 self 參數指向調用 introduce 方法的對象
    • 在第 3 行,introduce 方法通過 self.name 和 self.age 訪問對象的屬性
  • 在第 5 行,使用類 Person 創(chuàng)建一個對象 tom
    • 在第 6 行,設置對象 tom 的屬性 name,該屬性為實例屬性
    • 在第 7 行,設置對象 tom 的屬性 age,該屬性為實例屬性
    • 在第 8 行,調用對象 tom 的方法 introduce,對象 tom 被傳遞給方法 introduce,作為 self 參數,在執(zhí)行 introduce 時,self 參數指向對象 tom
  • 在第 10 行,使用類 Person 創(chuàng)建一個對象 jerry
    • 在第 11 行,設置對象 jerry 的屬性 name,該屬性為實例屬性
    • 在第 12 行,設置對象 jerry 的屬性 age,該屬性為實例屬性
    • 在第 13 行,調用對象 jerry 的方法 introduce,對象 jerry 被傳遞給方法 introduce,作為 self 參數,在執(zhí)行 introduce 時,self 參數指向對象 jerry

程序運行輸出如下:

name = tom, age = 10
name = jerry, age = 20

2. 構造方法

2.1 為什么需要構造方法

在前面的演示實例方法的程序中,創(chuàng)建了兩個對象 tom 和 age,創(chuàng)建對象后需要設置屬性的初始值,具體的過程如下所示:

  • 在第 5 行,使用類 Person 創(chuàng)建一個對象 tom
    • 在第 6 行,通過 tom.name = ‘TOM’ 設置對象 tom 的屬性 name
    • 在第 7 行,通過 tom.age = 10 設置對象 tom 的屬性 age
  • 在第 10 行,使用類 Person 創(chuàng)建一個對象 jerry
    • 在第 11 行,通過 jerry.name = ‘TOM’ 設置對象 jerry 的屬性 name
    • 在第 12 行,通過 jerry.age = 10 設置對象 jerry 的屬性 age

在初始化對象屬性時,存在一個明顯的問題:初始化 tom 的代碼塊和初始化 jerry 的代碼塊是類似和重復的。Python 提供了一個特殊的方法:構造方法,該方法用于初始化對象屬性,用于解決這個問題。

2.2 定義

構造方法是用于初始化對象屬性的方法,語法如下:

class:
    def __init__(self, 參數):
        self.屬性 = 參數

對象 =(參數)
  • 在第 2 行,在類中定義了一個方法 __init__,該方法被稱為構造方法
    • 方法名的前綴和后綴是兩個下劃線 _
    • 方法的第一個參數 self 指向新創(chuàng)建的對象
    • 方法的其余參數用于設定對象的屬性
  • 在第 3 行,在構造方法中,設定初始化對象的屬性
  • 在第 5 行,使用 “對象 = 類(參數)” 的形式創(chuàng)建一個新的對象,新創(chuàng)建的對象作為 self 參數傳遞給類的構造方法 __init__

2.3 例子

每個人具有 name 和 age 的屬性,創(chuàng)建一個類 Person,在類 Person 中定義構造方法 __init__,創(chuàng)建對象時設定對象的屬性,代碼示例如下:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def introduce(self):
        print('name = %s, age = %d' % (self.name, self.age))

tom = Person('tom', 10)
tom.introduce()

jerry = Person('jerry', 20)
jerry.introduce()
  • 在第 1 行,定義了類 Person
    • 在第 2 行,定義了類 Person 的構造方法 __init__
      • __init__ 的 self 參數指向新創(chuàng)建的對象
      • 在第 3 行和第 4 行,初始化對象的 name 和 age
    • 在第 6 行,定義了類 Person 的實例方法 introduce
      • introduce 的 self 參數指向調用 introduce 方法的對象
      • 在第 7 行,輸出對象的 name 和 age
  • 在第 9 行,使用類 Person 創(chuàng)建一個對象 tom
    • 新創(chuàng)建對象 tom 時,tom 的屬性 name 和 age 為空
    • 將對象 tom 作為參數傳遞給類 Person 的構造方法 __init__
    • 在構造方法 __init__** 設置屬性 name 和 age
  • 在第 12 行,使用類 Person 創(chuàng)建一個對象 jerry
    • 新創(chuàng)建對象 jerry 時,jerry 的屬性 name 和 age 為空
    • 將對象 jerry 作為參數傳遞給類 Person 的構造方法 __init__
    • 在構造方法 __init__** 設置屬性 name 和 age

程序運行輸出如下:

name = tom, age = 10
name = jerry, age = 20

3. 析構方法

3.1 del 語句

Python 提供了 del 語句用于刪除不再使用的變量,del 語句的語法如下:

del 表達式

使用 del 語句刪除變量,變量刪除后將無法再訪問,代碼如下:

>>> var = 'hello'
>>> print(var)
hello
>>> del var
>>> print(var)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'var' is not defined
  • 在第 1 行,創(chuàng)建變量 var
    • 在第 2 行,打印變量 var 的值
    • 在第 3 行,正確的輸出了
  • 在第 4 行,使用 del 語句刪除變量
    • 在第 5 行,打印變量 var 的值
    • 在第 6 行,因為變量 var 已經被刪除了,所以無法訪問變量 var,顯示錯誤:name ‘var’ is not defined

3.2 定義

Python 提供了一種機制使得對象被刪除前能夠得到通知。對象被刪除時,如果該對象擁有名為 __del__ 的方法,該方法在刪除前被調用,該方法又被稱為析構方法,語法如下:

class:
    def __del__(self):
        self.屬性
  • 在第 2 行,在類中定義了一個方法 __del__,該方法被稱為析構方法
    • 方法名的前綴和后綴是兩個下劃線 _
    • 方法的參數 self 指向將被刪除的對象

3.3 例子

創(chuàng)建一個類 Person,并定義析構方法 __del__,然后使用類 Person 創(chuàng)建兩個對象,最后再使用 del 語句刪除他們,驗證析構方法,代碼示例如下:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __del__(self):
        print('del %s' % self.name)

    def introduce(self):
        print('name = %s, age = %d' % (self.name, self.age))

tom = Person('tom', 10)
tom.introduce()

jerry = Person('jerry', 20)
jerry.introduce()

del tom
del jerry
  • 在第 1 行,定義了類 Person
    • 在第 2 行,定義了構造方法 __init__
    • 在第 6 行,定義了析構方法 __del__
    • 在第 9 行,定義了實例方法 introduce
  • 在第 12 行,使用類 Person 創(chuàng)建一個對象 tom
  • 在第 13 行,使用類 Person 創(chuàng)建一個對象 jerry
  • 在第 18 行,使用 del 語句刪除對象 tom,調用析構方法 tom.__del__()
  • 在第 19 行,使用 del 語句刪除對象 jerry,調用析構方法 jerry.__del__()

程序運行輸出如下:

name = tom, age = 10
name = jerry, age = 20
del tom
del jerry
  • 在第 1 行,執(zhí)行實例方法 tom.introduce() 輸出該行
  • 在第 2 行,執(zhí)行實例方法 jerry.introduce() 輸出該行
  • 在第 3 行,執(zhí)行 tom.__del__() 輸出該行
  • 在第 4 行,執(zhí)行 jerry.__del__() 輸出該行