python中的抽象类

       抽象类是抽象层次上的对象类型的一个定义,该对象类型往往是由许多具体的对象类型提取共性而得到的一个概念,它预定义了一些属性和方法(状态和行为),其中一些方法没有给出实现(抽象方法),而必须由子类来实现,这样的类就是抽象类。现实里能找到很多例子,智能手机、平板电脑这些概念是抽象类,它们定义了智能手机、平板电脑大体上是个什么样子,而苹果、华为、三星的智能手机、平板电脑的设计图纸就相当于子类,它们生产的智能手机、平板电脑产品就是子类的实例。电动汽车、4G、5G、第6代战斗机等等概念都可以看成抽象类。人类社会很多的伟大发明、学术理论都是从提出一个抽象的概念而发展而来,人的创造性的高层次表现就在于擅长提出抽象的概念并给出具体的物理实现。

      从语言语法特性来讲,抽象类就是包含有抽象方法的类,它不能被实例化,否则会报错。python2.x里没有语法特性意义上的抽象类,也就是没有抽象方法,也不存在类不能被实例化,但逻辑意义上的抽象类很普遍,比如我们定义一个类,里面有几个方法没有给出具体实现(你直接实例化它什么也干不了),然后需要定义子类对其进行实现,这个类其实就是抽象类。

       python3开始从语法特性上支持抽象类,它通过定义了几个装饰器来把类体里面的方法装饰成抽象方法来实现。还有抽象类的元类需要指定为ABCMeta。

    def abstractmethod(funcobj):

       funcobj.__isabstractmethod__ = True

    return funcobj 

abstractmethod是用来装饰一个类的实例方法为抽象方法的,也就是给实例方法附加了一个__abstractmethod__标志

class abstractclassmethod(classmethod):

        __isabstractmethod__ = True

        def __init__(self, callable):

            callable.__isabstractmethod__ = True

            super().__init__(callable)

      abstractclassmethod继承自classmethod,它们是一个非覆盖性描述符类,abstractclassmethod也就是在classmethod的装饰逻辑之上增加了给它们装饰的类方法附加了一个__abstractmethod__标志

class abstractstaticmethod(staticmethod):

    __isabstractmethod__ = True

    def __init__(self, callable):

        callable.__isabstractmethod__ = True

        super().__init__(callable)

abstractstaticmethod是把static方法标记为抽象方法,跟abstractclassmethod差不多的意思。

        当然把类方法和static方法定义为抽象方法还可以类似这样,这是被鼓励采用的方式

       @classmethod

       @abstractmethod

       def f(cls):pss

      在实际定义抽象类时,我们一般是把抽象方法定义为未给出实现的方法,但这不是强制的,其实是可以给出实现,在子类里面通过super调用来调用抽象方法,当然一般不会这样用。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__空无一人__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值