zoukankan      html  css  js  c++  java
  • 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方法,因此会抛出异常。

  • 相关阅读:
    1. Dubbo原理解析-Dubbo内核实现之SPI简单介绍 (转)
    经典算法问题的java实现 (二)
    经典算法问题的java实现 (一)
    Bitmap的秘密
    Java Networking: UDP DatagramSocket (翻译)
    Java字节码浅析(二)
    Sql server 浅谈用户定义表类型
    Jquery 动态生成表单 并将表单数据 批量通过Ajax插入到数据库
    ASP.NET获取上传图片的大小
    ASP.Net大文件上传组件详解
  • 原文地址:https://www.cnblogs.com/FG123/p/9463673.html
Copyright © 2011-2022 走看看