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进程的信号通讯
Apr 09 Python
在Python中操作列表之List.pop()方法的使用
May 21 Python
Python中的zipfile模块使用详解
Jun 25 Python
python中使用序列的方法
Aug 03 Python
python 字符串转列表 list 出现\ufeff的解决方法
Jun 22 Python
Python 多线程Threading初学教程
Aug 22 Python
python difflib模块示例讲解
Sep 13 Python
python pandas修改列属性的方法详解
Jun 09 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 Python
关于Python解包知识点总结
May 05 Python
python tqdm实现进度条的示例代码
Nov 10 Python
PyTorch 如何设置随机数种子使结果可复现
May 12 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 破解防盗链图片函数
2008/12/09 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
php对mongodb的扩展(初出茅庐)
2012/11/11 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
JavaScript下利用fso判断文件是否存在的代码
2010/12/11 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
同一个网页中实现多个JavaScript特效的方法
2015/02/02 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
Python中的深拷贝和浅拷贝详解
2015/06/03 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
Python笔记之观察者模式
2019/11/20 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
医院我们的节日活动实施方案
2014/08/22 职场文书
支部书记四风对照材料
2014/08/28 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
医德医风自我评价2015
2015/03/03 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
Mongo服务重启异常问题的处理方法
2021/07/01 MongoDB