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的Django框架中包装视图函数
Jul 20 Python
Python实现字符串逆序输出功能示例
Jun 24 Python
梯度下降法介绍及利用Python实现的方法示例
Jul 12 Python
对python csv模块配置分隔符和引用符详解
Dec 12 Python
Python一键安装全部依赖包的方法
Aug 12 Python
pytorch 可视化feature map的示例代码
Aug 20 Python
python3 反射的四种基本方法解析
Aug 26 Python
Python with语句和过程抽取思想
Dec 23 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
Mar 19 Python
Django import export实现数据库导入导出方式
Apr 03 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 Python
python删除文件、清空目录的实现方法
Sep 23 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
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
php下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
php 如何获取数组第一个值
2013/08/06 PHP
zend framework文件上传功能实例代码
2013/12/25 PHP
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
2018/12/24 PHP
jQuery实现的类flash菜单效果代码
2010/05/17 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
JavaScript实现的简单加密解密操作示例
2018/06/01 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
2018/09/05 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
pymssql ntext字段调用问题解决方法
2008/12/17 Python
Python日志模块logging简介
2015/04/13 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
Python机器学习之SVM支持向量机
2017/12/27 Python
PyQt5每天必学之布局管理
2018/04/19 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
python pandas生成时间列表
2019/06/29 Python
家教广告词
2014/03/19 职场文书
2014年招生工作总结
2014/11/26 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
行政诉讼答辩状
2015/05/21 职场文书
保险公司增员口号
2015/12/25 职场文书
Python进程间的通信之语法学习
2022/04/11 Python