最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python強制子類重寫父類的兩種方法實現(xiàn)

 更新時間:2024年02月23日 11:28:55   作者:軟件測試君  
在Python中,有時候我們希望某個類能夠被子類繼承并重寫其中的某些方法,本文主要介紹了Python強制子類重寫父類的兩種方法實現(xiàn),具有一定的參考價值,感興趣的可以了解一下

Python v3.7.0

方案一(推薦)

定義抽象基類,只要把一個方法定義成抽象方法,那解釋器就會要求子類必須重寫這個方法,要注意的是,如果抽象方法沒有被重寫,那么子類在實例化時,就會拋出TypeError異常,而不需要等到調用函數(shù)。

import abc

class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def speak(self):
        pass

class Dog(Animal):
    def run(self):
        pass

if __name__ == '__main__':
    dog = Dog()

運行以上代碼,會拋出異常:

TypeError: Can't instantiate abstract class Dog with abstract methods speak

只有在Dog子類中,重寫speak方法,才可以正常實例化子類。

方案二

指定父類方法拋出NotImplementedError異常

class Animal1():
    def speak(self):
        raise NotImplementedError

class Dog1(Animal1):
    def run(self):
        pass

if __name__ == '__main__':
    dog = Dog1()
    dog.speak()

子類中若沒有重寫speak方法,也可以正常實例化,但是調用此方法時,就會拋出NotImplementedError異常。

補充

在父類中定義的私有方法,其作用范圍僅在當前類,若在子類中重寫,實際上并不會起效果,原因:以雙下劃線前綴開頭的屬性或方法,Python解釋器會重寫其名稱,以便在類被擴展的時候不容易產生沖突,這被稱之為名稱修飾(name mangling),如下所示:

class Test:
    def __init__(self):
        self.__foo = True

    def __bar(self):
        return "bar"

t = Test()
print(dir(t))
print(t._Test__foo)
print(t._Test__bar())

輸出內容如下,注意列表前兩個值,這同時也說明在Python中是沒有絕對私有的變量或方法的。

['_Test__bar', '_Test__foo', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
True
bar

在類的繼承中,如果在子類中重寫了父類方法,但有時也希望能同時實現(xiàn)父類的功能,最常見的場景之一就是父類構造方法中的初始值無法被繼承,可以在子類中使用super 函數(shù)來調用父類中的方法,特別是多重繼承的情況;如下面的例子:

class Animal:
    def __init__(self):
        self.hungry = True

    def eat(self):
        if self.hungry:
            print('No!')
        else:
            print('Yes!')


class Bird(Animal):
    def __init__(self):
        self.song = '~~~'

    def sing(self):
        print(self.song)

bird = Bird()
bird.sing()   # 正常
bird.eat()    # 拋出異常:AttributeError: 'Bird' object has no attribute 'hungry'

解決的方法是在子類的構造函數(shù)中,使用super方法調用父類的構造函數(shù),如下:

class Bird(Animal):
    def __init__(self):
        super().__init__()
        self.song = '~~~'

到此這篇關于Python強制子類重寫父類的兩種方法實現(xiàn)的文章就介紹到這了,更多相關Python強制子類重寫父類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • python根據時間生成mongodb的ObjectId的方法

    python根據時間生成mongodb的ObjectId的方法

    這篇文章主要介紹了python根據時間生成mongodb的ObjectId的方法,涉及Python操作mongodb數(shù)據庫的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • python通過tcp發(fā)送xml報文的方法

    python通過tcp發(fā)送xml報文的方法

    今天小編就為大家分享一篇python通過tcp發(fā)送xml報文的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python+kivy BoxLayout布局示例代碼詳解

    Python+kivy BoxLayout布局示例代碼詳解

    這篇文章主要介紹了Python+kivy BoxLayout布局的示例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • python快速編寫單行注釋多行注釋的方法

    python快速編寫單行注釋多行注釋的方法

    在本篇文章里小編給大家整理的是關于python快速編寫單行注釋多行注釋的方法,有此需要的朋友們可以參考學習下。
    2019-07-07
  • python生成隨機圖形驗證碼詳解

    python生成隨機圖形驗證碼詳解

    這篇文章主要介紹了python生成隨機圖形驗證碼詳解,具有一定參考價值,需要的朋友可以參閱。
    2017-11-11
  • python中字典(Dictionary)用法實例詳解

    python中字典(Dictionary)用法實例詳解

    這篇文章主要介紹了python中字典(Dictionary)用法,以實例形式較為詳細的分析了Python字典建立、添加、刪除等常見操作技巧,需要的朋友可以參考下
    2015-05-05
  • 基于python實現(xiàn)弱密碼檢測工具

    基于python實現(xiàn)弱密碼檢測工具

    Python中一個強大的加密模塊,提供了許多常見的加密算法和工具,本文我們將使用Python編寫一個弱密碼檢測工具,感興趣的小伙伴可以了解一下
    2024-01-01
  • 從零帶你使用Python實現(xiàn)RAG(檢索增強生成)系統(tǒng)

    從零帶你使用Python實現(xiàn)RAG(檢索增強生成)系統(tǒng)

    檢索增強生成(Retrieval-Augmented Generation, RAG)是當下最熱門的 AI 應用架構之一,本文將帶你從零開始,用 Python 完整實現(xiàn)一個 RAG 系統(tǒng),涵蓋文檔加載,文本分塊,向量嵌入,語義檢索與生成回答的完整鏈路
    2026-04-04
  • python爬蟲之場內ETF基金獲取

    python爬蟲之場內ETF基金獲取

    這篇文章主要介紹了python爬蟲之場內ETF基金獲取,ETF?是一種場內交易型基金,可以在盤中進行交易,交易性比場外基金強一點,下文基于python的相關資料展開,需要的小伙伴可以參考一下
    2022-05-05
  • Python selenium模擬網頁點擊爬蟲交管12123違章數(shù)據

    Python selenium模擬網頁點擊爬蟲交管12123違章數(shù)據

    本次介紹怎么以模擬點擊方式進入交管12123爬取車輛違章數(shù)據,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05

最新評論

崇信县| 万山特区| 伊吾县| 确山县| 石棉县| 筠连县| 黎城县| 山阴县| 长春市| 孙吴县| 从江县| 四川省| 任丘市| 运城市| 临猗县| 慈溪市| 稷山县| 丰原市| 吉木乃县| 永寿县| 舟曲县| 吉隆县| 镇巴县| 读书| 大同市| 无极县| 玛沁县| 托里县| 长海县| 泸水县| 随州市| 汪清县| 新竹市| 马公市| 云林县| 原阳县| 柳林县| 永川市| 嫩江县| 双江| 赤壁市|