欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

Python v3.7.0

方案一(推薦)

定義抽象基類,只要把一個方法定義成抽象方法,那解釋器就會要求子類必須重寫這個方法,要注意的是,如果抽象方法沒有被重寫,那么子類在實例化時,就會拋出TypeError異常,而不需要等到調(diào)用函數(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方法,也可以正常實例化,但是調(diào)用此方法時,就會拋出NotImplementedError異常。

補充

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

輸出內(nèi)容如下,注意列表前兩個值,這同時也說明在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ù)來調(diào)用父類中的方法,特別是多重繼承的情況;如下面的例子:

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方法調(diào)用父類的構造函數(shù),如下:

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

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

相關文章

  • Python 加密與解密小結

    Python 加密與解密小結

    這篇文章主要介紹了Python 加密與解密,使用base64或pycrypto模塊需要的朋友可以參考下
    2018-12-12
  • 如何基于Python制作有道翻譯小工具

    如何基于Python制作有道翻譯小工具

    這篇文章主要介紹了如何基于Python制作有道翻譯小工具,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • python多線程實現(xiàn)同時執(zhí)行兩個while循環(huán)的操作

    python多線程實現(xiàn)同時執(zhí)行兩個while循環(huán)的操作

    這篇文章主要介紹了python多線程實現(xiàn)同時執(zhí)行兩個while循環(huán)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • pycharm調(diào)試功能如何實現(xiàn)跳到循環(huán)的某一步

    pycharm調(diào)試功能如何實現(xiàn)跳到循環(huán)的某一步

    這篇文章主要介紹了pycharm調(diào)試功能如何實現(xiàn)跳到循環(huán)的某一步問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python讀取文件的8種常用方式

    Python讀取文件的8種常用方式

    這篇文章主要給大家介紹了關于Python讀取文件的8種常用方式,在編程語言中,文件讀寫是最常見的IO操作,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • 使用Python和OpenCV進行視覺圖像分割的代碼示例

    使用Python和OpenCV進行視覺圖像分割的代碼示例

    在圖像處理領域,圖像分割是一項基礎且關鍵的技術,它涉及到將圖像劃分為若干個具有特定屬性的區(qū)域,本文將通過一個實踐項目,展示如何使用Python編程語言,結合OpenCV庫,對一張玫瑰花的圖片進行圖像分割,需要的朋友可以參考下
    2025-01-01
  • Python圖像閾值化處理及算法比對實例解析

    Python圖像閾值化處理及算法比對實例解析

    這篇文章主要介紹了Python圖像閾值化處理及算法比對實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Python利用遞歸實現(xiàn)文件的復制方法

    Python利用遞歸實現(xiàn)文件的復制方法

    今天小編就為大家分享一篇Python利用遞歸實現(xiàn)文件的復制方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python 圖像處理之PIL庫詳解用法

    Python 圖像處理之PIL庫詳解用法

    對于圖像識別,大量的工作在于圖像的處理,處理效果好,那么才能很好地識別,因此,良好的圖像處理是識別的基礎。在Python中,有一個優(yōu)秀的圖像處理框架,就是PIL庫,本文會介紹PIL庫中的各種方法,并列舉相關例子
    2021-11-11
  • Python?Scrapy庫構建基礎爬蟲

    Python?Scrapy庫構建基礎爬蟲

    這篇文章主要為大家介紹了Python?Scrapy庫構建基礎爬蟲示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08

最新評論