Python2和Python3中@abstractmethod的用法
抽象方法:
抽象方法表示基类的一个方法,没有实现,所以基类不能实例化,子类实现了该抽象方法才能被实例化。
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的用法相关推荐
- oracle urlencode 中文,Python2和Python3中urllib库中urlencode的使用注意事项
前言 在Python中,我们通常使用urllib中的urlencode方法将字典编码,用于提交数据给url等操作,但是在Python2和Python3中urllib模块中所提供的urlencode的包 ...
- python3生成一个定长列表_range方法在Python2和Python3中的不同
range 列表 range()方法是Python中常用的方法, 但是在Python2和Python3中使用方法不同,下面看下它们的不同使用方法. range方法详解 range(start, sto ...
- python2与python3性能对比_对Python2与Python3中__bool__方法的差异详解
对Python2与Python3中__bool__方法的差异详解 发布时间:2020-08-28 00:08:58 来源:脚本之家 阅读:74 作者:grey_csdn 学习Python面向对象编程的 ...
- range方法在Python2和Python3中的不同
range()方法是Python中常用的方法, 但是在Python2和Python3中使用方法不同,下面看下它们的不同使用方法. range方法详解 range(start, stop[, step] ...
- python2 md5库_python版本坑:md5例子(python2与python3中md5区别)
起步 对于一些字符,python2和python3的md5加密出来是不一样的. # python2.7 pwd = "xxx" + chr(163) + "fj" ...
- Python2和python3中类型判断
Python2类型判断 >>> type(33) == types.IntType True >>> type("33") == types.S ...
- python2和python3中的range区别
python2中的range返回的是一个列表 python3中的range返回的是一个迭代值 for i in range(1,10)在python2和python3中都可以使用,但是要生成1-10的 ...
- Python2和Python3中除法运算符的区别有哪些?你都知道吗?
在Python2中,除法的取值结果取整数 >>>7/3 2 即一个整数(无小数部分的数)被另外一个整数除,计算结果的小数部分被截除了,只留下了整数部分. 在Python3中,除法/的 ...
- python2和python3中encoding的差别
1.写在前面的话 对于一些python库,比如:requests,会用到编码和解码(requests.utils.get_encodings_from_content()),还记得写在python文件 ...
最新文章
- 我佛了!用KNN实现验证码识别,又 Get 到一招!
- postsharp初体验
- 微软官方windows phone开发视频教程第二天视频(附下载地址)
- 需求说明 用户登陆功能的实现 c#
- frisby用例动态链
- eclipse中文版 中英文切换
- 51单片机驱动LCD1602液晶
- 公司董事会人数怎么确定
- GCTF 2017 Web 补题 By Assassin [持续更新--抄大佬wp]
- 带参数矩阵求逆(matlab)
- Gitter有趣的软件安装界面
- 你知道 DNS,那我猜你一定不知道 HTTPDNS
- 罗克韦尔AB PLC ControlLogix PLC的介绍和选型
- Linux系统结构以及各类命令的汇总
- 【读书笔记】概率图模型——基于R语言(一)
- java实现客户端 与服务端的对话_Socket实现单客户端与服务器对话功能
- 记一次rc.local中python脚本无法运行的解决过程
- 计算机基础题word,计算机应用基础试题(带答案)Word版
- 解析人工智能与人类智慧的求同存异
- 基于用户的API限流策略
热门文章
- 单细胞分析Seurat使用相关的10个问题答疑精选!
- 服务器硬盘raid5扩容,超实用,物理服务器RAID扩容详解
- 第3课 攀天梯(ladder)--记忆化搜索(python3实现)
- 09花冠钥匙计算机电路图,丰田花冠轿车发动机防盗系统设定
- 计算机公共基础知识书第二版答案,二级计算机公共基础知识课后习题及答案.doc...
- xjc java_xjc命令转换成java类乱码
- STM32H743+CubeMX-QSPI读写外部FLASH(W25Q128JVSQ)
- mysql待办事项表名_Activiti中彻底解决待办事项列表查询复杂、API不友好的设计方案...
- 苹果ios浏览器里面数字被当做电话号码
- c语言用递归方法实现冒泡排序,C语言 冒泡排序 递归法