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之深入变量和引用对象
Sep 24 Python
Python与Redis的连接教程
Apr 22 Python
用Python写冒泡排序代码
Apr 12 Python
Python实现带百分比的进度条
Jun 28 Python
利用python批量检查网站的可用性
Sep 09 Python
python3解析库pyquery的深入讲解
Jun 26 Python
python学生信息管理系统(初级版)
Oct 17 Python
python实现写数字文件名的递增保存文件方法
Oct 25 Python
使用Python进行中文繁简转换的实现代码
Oct 18 Python
Django密码存储策略分析
Jan 09 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
Jan 14 Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 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以ROOT权限执行系统命令的方法
2011/02/10 PHP
探讨方法的重写(覆载)详解
2013/06/08 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
php判断IP地址是否在多个IP段内
2020/08/18 PHP
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
jquery 的 $("#id").html() 无内容的解决方法
2010/06/07 Javascript
JS中操作JSON总结
2020/12/06 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
socket.io学习教程之深入学习篇(三)
2017/04/29 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
python rsa 加密解密
2017/03/20 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
python放大图片和画方格实现算法
2018/03/30 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
Python3 读取Word文件方式
2020/02/13 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
Python加速程序运行的方法
2020/07/29 Python
HTML5 新事件 小结
2009/07/16 HTML / CSS
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
Linux内核产生并发的原因
2016/11/08 面试题
服装厂厂长职责
2013/12/16 职场文书
文案策划求职信
2014/03/18 职场文书
学校标语口号大全
2015/12/26 职场文书
redis限流的实际应用
2021/04/24 Redis
MySQL笔记 —SQL运算符
2022/01/18 MySQL