Python之抽象類、抽象方法


抽象類中只能有抽象方法,子類繼承抽象類時,不能通過實例化使用其抽象方法,必須實現該方法。

Python2

class CopyBase(object): def save(self): raise NotImplementedError class CopyPaper(CopyBase): def __init__(self): pass

    def save(self): print("copy paper") class CopyQuestion(CopyBase): def __init__(self): pass copy_paper = CopyPaper() copy_paper.save() copy_question = CopyQuestion() copy_question.save() result: copy paper Traceback (most recent call last): copy_question.save() raise NotImplementedError NotImplementedError

這里以NotImplementedError的形式實現了抽象類和抽象方法,如果子類不實現該方法會拋出異常

 

Python3

在Python3中引入了abc模塊,通過@abc.abstractmethod可以更加簡潔地使用抽象類,抽象方法。

import abc class CopyBase(metaclass=abc.ABCMeta): @abc.abstractmethod def save(self): pass


class CopyPaper(CopyBase): def __init__(self): pass

    def save(self): print("copy paper") class CopyQuestion(CopyBase): def __init__(self): pass copy_paper = CopyPaper() copy_paper.save() copy_question = CopyQuestion() copy_question.save() result: copy paper Traceback (most recent call last): copy_question = CopyQuestion() TypeError: Can't instantiate abstract class CopyQuestion with abstract methods save

從abc模塊引入類abstractmethod和類ABCMeta,自定義的CopyBase類繼承抽象類ABCMeta,在類CopyBase中定義save方法,

添加裝飾器abcstractmethod,CopyPaper類和CopyQuestion繼承CopyBase類,分別實例化CopyPaper和CopyQuestion,

CopyQuestion類沒有實現save方法,因此會拋出異常。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM