抽象方法:

抽象方法表示基类的一个方法,没有实现,所以基类不能实例化,子类实现了该抽象方法才能被实例化。

Python的abc提供了@abstractmethod装饰器实现抽象方法,下面以Python3的abc模块举例。

@abstractmethod:

见下图的代码,基类Foo的fun方法被@abstractmethod装饰了,所以Foo不能被实例化;子类SubA没有实现基类的fun方法也不能被实例化;子类SubB实现了基类的抽象方法fun所以能实例化。

完整代码:

在Python3.4中,声明抽象基类最简单的方式是子类话abc.ABC;Python3.0到Python3.3,必须在class语句中使用metaclass=ABCMeta;Python2中使用__metaclass__=ABCMeta

Python3.4 实现方法:

from abc import ABC, abstractmethodclass Foo(ABC):@abstractmethoddef fun(self):'''please Implemente in subclass'''class SubFoo(Foo):def fun(self):print('fun in SubFoo')a = SubFoo()
a.fun()

Python3.0到Python3.3的实现方法:

from abc import abstractmethod, ABCMetaclass Bar(metaclass=ABCMeta):@abstractmethoddef fun(self):'''please Implemente in subclass'''class SubBar(Bar):def fun(self):print('fun in SubBar')b = SubBar()
b.fun()

Python2的实现方法:

from abc import ABCMeta, abstractmethodclass FooBar():__metaclass__ = ABCMeta@abstractmethoddef fun(self):'''please Implemente in subclass'''class SubFooBar(FooBar):def fun(self):print('fun in SubFooBar')a = SubFooBar()
a.fun()

Python2和Python3中@abstractmethod的用法相关推荐

  1. oracle urlencode 中文,Python2和Python3中urllib库中urlencode的使用注意事项

    前言 在Python中,我们通常使用urllib中的urlencode方法将字典编码,用于提交数据给url等操作,但是在Python2和Python3中urllib模块中所提供的urlencode的包 ...

  2. python3生成一个定长列表_range方法在Python2和Python3中的不同

    range 列表 range()方法是Python中常用的方法, 但是在Python2和Python3中使用方法不同,下面看下它们的不同使用方法. range方法详解 range(start, sto ...

  3. python2与python3性能对比_对Python2与Python3中__bool__方法的差异详解

    对Python2与Python3中__bool__方法的差异详解 发布时间:2020-08-28 00:08:58 来源:脚本之家 阅读:74 作者:grey_csdn 学习Python面向对象编程的 ...

  4. range方法在Python2和Python3中的不同

    range()方法是Python中常用的方法, 但是在Python2和Python3中使用方法不同,下面看下它们的不同使用方法. range方法详解 range(start, stop[, step] ...

  5. python2 md5库_python版本坑:md5例子(python2与python3中md5区别)

    起步 对于一些字符,python2和python3的md5加密出来是不一样的. # python2.7 pwd = "xxx" + chr(163) + "fj" ...

  6. Python2和python3中类型判断

    Python2类型判断 >>> type(33) == types.IntType True >>> type("33") == types.S ...

  7. python2和python3中的range区别

    python2中的range返回的是一个列表 python3中的range返回的是一个迭代值 for i in range(1,10)在python2和python3中都可以使用,但是要生成1-10的 ...

  8. Python2和Python3中除法运算符的区别有哪些?你都知道吗?

    在Python2中,除法的取值结果取整数 >>>7/3 2 即一个整数(无小数部分的数)被另外一个整数除,计算结果的小数部分被截除了,只留下了整数部分. 在Python3中,除法/的 ...

  9. python2和python3中encoding的差别

    1.写在前面的话 对于一些python库,比如:requests,会用到编码和解码(requests.utils.get_encodings_from_content()),还记得写在python文件 ...

最新文章

  1. 我佛了!用KNN实现验证码识别,又 Get 到一招!
  2. postsharp初体验
  3. 微软官方windows phone开发视频教程第二天视频(附下载地址)
  4. 需求说明 用户登陆功能的实现 c#
  5. frisby用例动态链
  6. eclipse中文版 中英文切换
  7. 51单片机驱动LCD1602液晶
  8. 公司董事会人数怎么确定
  9. GCTF 2017 Web 补题 By Assassin [持续更新--抄大佬wp]
  10. 带参数矩阵求逆(matlab)
  11. Gitter有趣的软件安装界面
  12. 你知道 DNS,那我猜你一定不知道 HTTPDNS
  13. 罗克韦尔AB PLC ControlLogix PLC的介绍和选型
  14. Linux系统结构以及各类命令的汇总
  15. 【读书笔记】概率图模型——基于R语言(一)
  16. java实现客户端 与服务端的对话_Socket实现单客户端与服务器对话功能
  17. 记一次rc.local中python脚本无法运行的解决过程
  18. 计算机基础题word,计算机应用基础试题(带答案)Word版
  19. 解析人工智能与人类智慧的求同存异
  20. 基于用户的API限流策略

热门文章

  1. 单细胞分析Seurat使用相关的10个问题答疑精选!
  2. 服务器硬盘raid5扩容,超实用,物理服务器RAID扩容详解
  3. 第3课 攀天梯(ladder)--记忆化搜索(python3实现)
  4. 09花冠钥匙计算机电路图,丰田花冠轿车发动机防盗系统设定
  5. 计算机公共基础知识书第二版答案,二级计算机公共基础知识课后习题及答案.doc...
  6. xjc java_xjc命令转换成java类乱码
  7. STM32H743+CubeMX-QSPI读写外部FLASH(W25Q128JVSQ)
  8. mysql待办事项表名_Activiti中彻底解决待办事项列表查询复杂、API不友好的设计方案...
  9. 苹果ios浏览器里面数字被当做电话号码
  10. c语言用递归方法实现冒泡排序,C语言 冒泡排序 递归法