Python2和Python3中@abstractmethod使用方法


Posted in Python onFebruary 04, 2020

这篇文章主要介绍了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, abstractmethod


class Foo(ABC):
  @abstractmethod
  def 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, ABCMeta

class Bar(metaclass=ABCMeta):
  @abstractmethod
  def 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, abstractmethod


class FooBar():
  __metaclass__ = ABCMeta
  @abstractmethod
  def fun(self):
     '''please Implemente in subclass'''
class SubFooBar(FooBar):
  def fun(self):
    print('fun in SubFooBar')
    
a = SubFooBar()
a.fun()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
python脚本替换指定行实现步骤
Jul 11 Python
利用信号如何监控Django模型对象字段值的变化详解
Nov 27 Python
python多进程中的内存复制(实例讲解)
Jan 05 Python
对numpy中的数组条件筛选功能详解
Jul 02 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
Django实现学生管理系统
Feb 26 Python
django drf框架中的user验证以及JWT拓展的介绍
Aug 12 Python
python二元表达式用法
Dec 04 Python
pytorch 自定义卷积核进行卷积操作方式
Dec 30 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 Python
Python如何用re模块实现简易tokenizer
May 02 Python
python如何求数组连续最大和的示例代码
Feb 04 #Python
tensorflow 实现自定义layer并添加到计算图中
Feb 04 #Python
TensorFlow实现自定义Op方式
Feb 04 #Python
tensorflow使用指定gpu的方法
Feb 04 #Python
TensorFlow梯度求解tf.gradients实例
Feb 04 #Python
基于TensorFlow中自定义梯度的2种方式
Feb 04 #Python
tensorflow 查看梯度方式
Feb 04 #Python
You might like
php字符串分割函数explode的实例代码
2013/02/07 PHP
PHP和Mysql中转UTF8编码问题汇总
2015/10/10 PHP
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
javascript 全等号运算符使用说明
2010/05/31 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
Jquery中的层次选择器与find()的区别示例介绍
2014/02/20 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
ES6新增的math,Number方法
2017/08/06 Javascript
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
Angular使用cli生成自定义文件、组件的方法
2018/09/04 Javascript
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python获取服务器信息的最简单实现方法
2015/03/05 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
解决Django模板无法使用perms变量问题的方法
2017/09/10 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
马德里著名的运动鞋商店:NOIRFONCE
2019/04/12 全球购物
海蓝之谜英国官网:La Mer英国
2020/01/15 全球购物
中软国际Java程序员笔试题
2014/07/19 面试题
求职面试个人自我评价
2014/02/28 职场文书
中华魂演讲稿
2014/05/13 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
golang 实现时间戳和时间的转化
2021/05/07 Golang
PyTorch的Debug指南
2021/05/07 Python
MySQL 全文索引使用指南
2021/05/25 MySQL
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python