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

全部開(kāi)發(fā)者教程

Python 進(jìn)階應(yīng)用教程

Python 進(jìn)階應(yīng)用教程
01 Python 的對(duì)象和類 02 Python 類屬性和實(shí)例屬性 03 Python類的構(gòu)造方法、析構(gòu)方法、實(shí)例方法 04 Python 類的私有屬性和私有方法 05 Python 類的繼承和多繼承 06 Python 類實(shí)戰(zhàn) 07 Python 中的迭代器實(shí)現(xiàn)原理 08 Python 中的迭代器趣味實(shí)踐 09 Python 中的生成器實(shí)現(xiàn)原理 10 Python 中的生成器趣味實(shí)踐 11 Python 中的錯(cuò)誤和異常 12 Python 中的異常處理 13 Python 中的模塊 14 Python 標(biāo)準(zhǔn)庫(kù)之 os 模塊 15 Python 標(biāo)準(zhǔn)庫(kù)之 sys 模塊 16 Python 標(biāo)準(zhǔn)庫(kù)之 math 模塊 17 Python 標(biāo)準(zhǔn)庫(kù)之 random 模塊 18 Python 標(biāo)準(zhǔn)庫(kù)之 Json 模塊 19 Python 標(biāo)準(zhǔn)庫(kù) datetime 模塊 20 Python 中的常用第三方模塊 21 Python 中的命名空間 22 Python 中的作用域 23 Python 中的文件 IO 操作 24 Python 基礎(chǔ)實(shí)戰(zhàn) 25 Python 內(nèi)置函數(shù) 26 Python 中使用正則表達(dá)式 27 使用 Python 操作 MySQL 數(shù)據(jù)庫(kù) 28 使用 Python 操作 Mongo 數(shù)據(jù)庫(kù) 29 使用 Python 操作 Redis 數(shù)據(jù)庫(kù) 30 使用 Python 發(fā)送一封郵件 31 threading 之 Thread 的使用 32 threading 之 Lock 的基本使用 33 Python 生產(chǎn)者消費(fèi)者模型 34 Python 的內(nèi)存管理與垃圾回收 35 Python 領(lǐng)域運(yùn)用:網(wǎng)絡(luò)爬蟲(chóng) 36 Python 領(lǐng)域運(yùn)用:Web 開(kāi)發(fā) 37 Python 領(lǐng)域運(yùn)用:自動(dòng)化運(yùn)維 38 Python 領(lǐng)域運(yùn)用:自動(dòng)化測(cè)試
首頁(yè) 慕課教程 Python 進(jìn)階應(yīng)用教程 Python 進(jìn)階應(yīng)用教程 03 Python類的構(gòu)造方法、析構(gòu)方法、實(shí)例方法

Python 類的構(gòu)造方法、析構(gòu)方法、實(shí)例方法

上一個(gè)小節(jié)我們學(xué)習(xí)了 Python 的類屬性和實(shí)例屬性的知識(shí)點(diǎn),這個(gè)小節(jié)我們還是會(huì)學(xué)習(xí)關(guān)于類的知識(shí)。這節(jié)課我們會(huì)學(xué)習(xí)類的構(gòu)造方法、析構(gòu)方法和實(shí)例方法。

1. 實(shí)例方法

1.1 定義

實(shí)例方法是用于訪問(wèn)對(duì)象實(shí)例屬性的方法,語(yǔ)法如下:

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

實(shí)例方法定義在類中,它的第一個(gè)參數(shù) self 指向調(diào)用該方法的對(duì)象,在實(shí)例方法中通過(guò) “self.屬性” 訪問(wèn)對(duì)象的實(shí)例屬性。

1.2 例子

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

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 參數(shù)指向調(diào)用 introduce 方法的對(duì)象
    • 在第 3 行,introduce 方法通過(guò) self.name 和 self.age 訪問(wèn)對(duì)象的屬性
  • 在第 5 行,使用類 Person 創(chuàng)建一個(gè)對(duì)象 tom
    • 在第 6 行,設(shè)置對(duì)象 tom 的屬性 name,該屬性為實(shí)例屬性
    • 在第 7 行,設(shè)置對(duì)象 tom 的屬性 age,該屬性為實(shí)例屬性
    • 在第 8 行,調(diào)用對(duì)象 tom 的方法 introduce,對(duì)象 tom 被傳遞給方法 introduce,作為 self 參數(shù),在執(zhí)行 introduce 時(shí),self 參數(shù)指向?qū)ο?tom
  • 在第 10 行,使用類 Person 創(chuàng)建一個(gè)對(duì)象 jerry
    • 在第 11 行,設(shè)置對(duì)象 jerry 的屬性 name,該屬性為實(shí)例屬性
    • 在第 12 行,設(shè)置對(duì)象 jerry 的屬性 age,該屬性為實(shí)例屬性
    • 在第 13 行,調(diào)用對(duì)象 jerry 的方法 introduce,對(duì)象 jerry 被傳遞給方法 introduce,作為 self 參數(shù),在執(zhí)行 introduce 時(shí),self 參數(shù)指向?qū)ο?jerry

程序運(yùn)行輸出如下:

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

2. 構(gòu)造方法

2.1 為什么需要構(gòu)造方法

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

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

在初始化對(duì)象屬性時(shí),存在一個(gè)明顯的問(wèn)題:初始化 tom 的代碼塊和初始化 jerry 的代碼塊是類似和重復(fù)的。Python 提供了一個(gè)特殊的方法:構(gòu)造方法,該方法用于初始化對(duì)象屬性,用于解決這個(gè)問(wèn)題。

2.2 定義

構(gòu)造方法是用于初始化對(duì)象屬性的方法,語(yǔ)法如下:

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

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

2.3 例子

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

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 的構(gòu)造方法 __init__
      • __init__ 的 self 參數(shù)指向新創(chuàng)建的對(duì)象
      • 在第 3 行和第 4 行,初始化對(duì)象的 name 和 age
    • 在第 6 行,定義了類 Person 的實(shí)例方法 introduce
      • introduce 的 self 參數(shù)指向調(diào)用 introduce 方法的對(duì)象
      • 在第 7 行,輸出對(duì)象的 name 和 age
  • 在第 9 行,使用類 Person 創(chuàng)建一個(gè)對(duì)象 tom
    • 新創(chuàng)建對(duì)象 tom 時(shí),tom 的屬性 name 和 age 為空
    • 將對(duì)象 tom 作為參數(shù)傳遞給類 Person 的構(gòu)造方法 __init__
    • 在構(gòu)造方法 __init__** 設(shè)置屬性 name 和 age
  • 在第 12 行,使用類 Person 創(chuàng)建一個(gè)對(duì)象 jerry
    • 新創(chuàng)建對(duì)象 jerry 時(shí),jerry 的屬性 name 和 age 為空
    • 將對(duì)象 jerry 作為參數(shù)傳遞給類 Person 的構(gòu)造方法 __init__
    • 在構(gòu)造方法 __init__** 設(shè)置屬性 name 和 age

程序運(yùn)行輸出如下:

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

3. 析構(gòu)方法

3.1 del 語(yǔ)句

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

del 表達(dá)式

使用 del 語(yǔ)句刪除變量,變量刪除后將無(wú)法再訪問(wèn),代碼如下:

>>> 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 語(yǔ)句刪除變量
    • 在第 5 行,打印變量 var 的值
    • 在第 6 行,因?yàn)樽兞?var 已經(jīng)被刪除了,所以無(wú)法訪問(wèn)變量 var,顯示錯(cuò)誤:name ‘var’ is not defined

3.2 定義

Python 提供了一種機(jī)制使得對(duì)象被刪除前能夠得到通知。對(duì)象被刪除時(shí),如果該對(duì)象擁有名為 __del__ 的方法,該方法在刪除前被調(diào)用,該方法又被稱為析構(gòu)方法,語(yǔ)法如下:

class:
    def __del__(self):
        self.屬性
  • 在第 2 行,在類中定義了一個(gè)方法 __del__,該方法被稱為析構(gòu)方法
    • 方法名的前綴和后綴是兩個(gè)下劃線 _
    • 方法的參數(shù) self 指向?qū)⒈粍h除的對(duì)象

3.3 例子

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

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 行,定義了構(gòu)造方法 __init__
    • 在第 6 行,定義了析構(gòu)方法 __del__
    • 在第 9 行,定義了實(shí)例方法 introduce
  • 在第 12 行,使用類 Person 創(chuàng)建一個(gè)對(duì)象 tom
  • 在第 13 行,使用類 Person 創(chuàng)建一個(gè)對(duì)象 jerry
  • 在第 18 行,使用 del 語(yǔ)句刪除對(duì)象 tom,調(diào)用析構(gòu)方法 tom.__del__()
  • 在第 19 行,使用 del 語(yǔ)句刪除對(duì)象 jerry,調(diào)用析構(gòu)方法 jerry.__del__()

程序運(yùn)行輸出如下:

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