0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

python類的多態(tài)和類的property屬性

python爬蟲知識分享 ? 來源:python爬蟲知識分享 ? 作者:python爬蟲知識分享 ? 2022-03-09 16:37 ? 次閱讀

python類的多態(tài)

多態(tài),是指在同一類型下的不同形態(tài)。

比如下面這段代碼

class People:
    def speak(self):
        pass

class American(People):
    def speak(self):
        print("Hello, boys")

class Chinese(People):
    def speak(self):
        print("你好,老鐵")

p1 = American()
p2 = Chinese()

American 和 Chinese 都繼承了 People 類,但他們在 speak() 函數(shù)下,卻有不同的形態(tài)表現(xiàn)。American 說英文,Chinese 說漢語。

倘若現(xiàn)在有一個 do_speak 函數(shù)

def do_speak(people):
    people.speak()

do_speak(p1)
do_speak(p2)

那么無論傳入的 American 實例還是 Chinese 實例,只要他有實現(xiàn) speak 方法都可以。

這就是 Python 中非常有名鴨子類型:一個對象只要“看起來像鴨子,走起路來像鴨子”,那它就可以被看做是鴨子。

套入剛剛的代碼實例中,就是一個對象,只要有 speak 方法,那么他就是一個 do_speak 方法所需要的 people 對象。

類的 property 屬性

在之前的學(xué)習(xí)中,對象的屬性,我們都是通過把變量值賦值給對象本身來實現(xiàn)的。

>>> class Student:pass
...
>>>
>>> s = Student()
>>> s.name = "王炳明"
>>> s.age = 27

直接賦值會存在一個問題,就是無法對屬性值進行合法性較驗,比如我給 age 賦值的是負數(shù),在業(yè)務(wù)上這種數(shù)據(jù)是不合法的。但上面那種寫法是無法檢查出來的。

>>> s.age = -27
>>> s.age
-27

為了實現(xiàn)屬性的合法性校驗,Python 引入的 property 屬性。

請看下面這段代碼

class Student:
    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if 0 <= value <= 150:
            self._age = value
        else:
            raise ValueError("Valid value must be in [0, 150]")

此時再對 age 屬性進行賦值就會對 value 的值進行合法性檢查,小于 0 或者 大于 150 的都是不合法數(shù)據(jù)。

>>> s = Student()
>>> s.age = -27
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 10, in age
ValueError: Valid value must be in [0, 150]

由此我們知道了 property ,其實是 Python 中一個內(nèi)置的裝飾器,它可以在新式類中把一個函數(shù) 改造 成屬性。

當你讀取屬性值時,會進入被 property 裝飾的函數(shù)。

當你對屬性進行賦值時,會進入被 @xx.setter 裝飾的函數(shù)。

兩個裝飾器,一定是 @property 在前面,而 @xx.setter 在后

審核編輯:符乾江

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關(guān)推薦

    請問TLV320ADC3101是哪一功放?A還是D?

    TLV320ADC3101是哪一功放?A還是D?在數(shù)據(jù)手冊中的哪一頁有提到呀?
    發(fā)表于 11-08 07:26

    網(wǎng)口能接五網(wǎng)線嗎

    網(wǎng)口能接五網(wǎng)線。六系統(tǒng)向下兼容超五、五以及三系統(tǒng),因此六
    的頭像 發(fā)表于 11-01 09:49 ?3287次閱讀

    A和B功放有什么區(qū)別

    A功放(甲類功放)與B功放(乙類功放)在音頻放大領(lǐng)域具有顯著的區(qū)別,這些區(qū)別主要體現(xiàn)在工作原理、音質(zhì)表現(xiàn)、效率、散熱以及成本等多個方面。以下是對A和B功放區(qū)別的詳細介紹。
    的頭像 發(fā)表于 08-22 11:34 ?1616次閱讀

    java子類可以繼承父的什么

    Java是一種面向?qū)ο蟮木幊陶Z言,它支持繼承的概念。繼承是面向?qū)ο缶幊痰娜筇匦灾?,它允許一個(稱為子類或派生)繼承另一個(稱為父或基
    的頭像 發(fā)表于 08-20 11:02 ?1392次閱讀

    網(wǎng)線6和超6的區(qū)別

    網(wǎng)線(Cat6)和超六網(wǎng)線(Cat6e)是兩種常用的以太網(wǎng)網(wǎng)絡(luò)電纜,它們在多個方面存在區(qū)別,主要包括帶寬、傳輸速度、標識、價格、距離以及物理特性等。以下是對兩者區(qū)別的詳細分析: 1. 帶寬
    的頭像 發(fā)表于 08-06 10:40 ?9761次閱讀

    6網(wǎng)線和5網(wǎng)線的區(qū)別

    網(wǎng)線(Cat6)和五網(wǎng)線(Cat5)是兩種不同類型的網(wǎng)絡(luò)線纜,它們在多個方面存在顯著差異。以下是它們之間的主要區(qū)別: 1. 傳輸速率與帶寬 五網(wǎng)線:傳輸速率為100Mbps,帶寬為
    的頭像 發(fā)表于 08-05 09:50 ?4445次閱讀

    56水晶頭通用嗎

    5和6水晶頭并不通用。這一結(jié)論主要基于以下幾個方面的考慮: 一、物理尺寸與結(jié)構(gòu)差異 尺寸差異:雖然五和六水晶頭的外部尺寸可能相似,但六
    的頭像 發(fā)表于 07-30 10:15 ?5759次閱讀

    水晶頭能接五線嗎

    水晶頭能接五線。這是因為六網(wǎng)線水晶頭向下兼容超五網(wǎng)線、五網(wǎng)線以及三系統(tǒng),所以在保證
    的頭像 發(fā)表于 06-25 09:55 ?5582次閱讀

    網(wǎng)線接五面板有影響嗎

    網(wǎng)線接五面板會對網(wǎng)絡(luò)傳輸速度和穩(wěn)定性產(chǎn)生影響。五面板只能夠用于五或者超五的網(wǎng)線連接,不能完全發(fā)揮六
    的頭像 發(fā)表于 06-04 10:46 ?4562次閱讀

    A和B功放哪個更好

    在音頻放大領(lǐng)域,A(甲類)和B(乙類)功放作為兩種常見的放大技術(shù),各自具有獨特的優(yōu)勢和適用場景。本文旨在深入探討A和B功放的性能特點、優(yōu)缺點、應(yīng)用場景以及如何選擇,以期為讀者提
    的頭像 發(fā)表于 05-31 18:11 ?5606次閱讀

    線和六線的區(qū)別

    線和六線在多個方面存在顯著的區(qū)別。 首先,從定義上來看,五線(Cat.5)是一種計算機網(wǎng)絡(luò)中使用的雙絞式電纜,主要用于數(shù)據(jù)、話音等信息通信業(yè)務(wù),被廣泛應(yīng)用于以太網(wǎng)、寬帶接入工程中。而六
    的頭像 發(fā)表于 04-22 11:14 ?2563次閱讀

    的網(wǎng)線能用六水晶頭嗎

    網(wǎng)線不能使用六或七水晶頭。雖然六和七水晶頭與八網(wǎng)線在結(jié)構(gòu)上有相似之處,但是它們的性
    的頭像 發(fā)表于 04-18 11:45 ?2119次閱讀

    怎樣分別網(wǎng)線是五還是六

    可以通過以下幾種方法來區(qū)分網(wǎng)線是五還是六: 觀察網(wǎng)線的外皮標注。五網(wǎng)線的外皮會標注“CAT5”字樣,而六網(wǎng)線的外皮會標注“CAT6”字樣。這是最直接、最簡單的區(qū)分方法。 檢查網(wǎng)
    的頭像 發(fā)表于 03-27 09:55 ?4648次閱讀

    超6網(wǎng)線和6網(wǎng)線存在哪些差異

    超6網(wǎng)線和6網(wǎng)線在多個方面存在差異: 速度和帶寬:超6網(wǎng)線主要用于10Gbps的網(wǎng)絡(luò)連接,而6網(wǎng)線主要用于1Gbps的網(wǎng)絡(luò)連接。超6
    的頭像 發(fā)表于 03-01 14:00 ?5917次閱讀

    ip地址怎么判斷abc

     AIP地址的第一個字節(jié)范圍在1到126之間,其默認網(wǎng)絡(luò)掩碼為255.0.0.0。例如,10.0.0.1就是一個AIP地址。
    的頭像 發(fā)表于 02-19 10:16 ?8515次閱讀