Python2和Python3中@abstractmethod使用方法
这篇文章主要介绍了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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
python3 Scrapy爬虫框架ip代理配置的方法
什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板.对于框架的学习,重点是要学习其框架的特性.各个功能的用法即可. 一.背景 在做爬虫项目的过程中遇到ip代理的问题,网上搜了一些,要么是用阿里云的ip代理,要么是搜一些网上现有的ip资源,然后配置在setting文件中.这两个方法都存在一些问题. 1.阿里云ip代理方法,网上大
-
python3连接mysql获取ansible动态inventory脚本
Ansible Inventory 介绍 Ansible Inventory 是包含静态 Inventory 和动态 Inventory 两部分的,静态 Inventory 指的是在文件中指定的主机和组,动态 Inventory 指通过外部脚本获取主机列表,并按照 ansible 所要求的格式返回给 ansilbe 命令的.这部分一般会结合 CMDB 资管系统.云计算平台等获取主机信息.由于主机资源一般会动态的进行增减,而这些系统一般会智能更新.我们可以通过这些工具提供的 API 或者接入库查
-
Ubuntu16.04安装python3.6.5步骤详解
下载python3.6.5安装包 1. 上传安装包.打开终端,利用命令cd 进入文件所在文件夹里 python@ubuntu:~/workspace$pwd /home/python/workspace 2. 解压文件 tar xfzPython-3.6.5.tgz 注意:这里使用xfz命令,而不建议使用-xvzf命令,因为其释放的文件夹需要root权限才可以更改或者删除. python@ubuntu:~/workspace$tar xfz Python-3.6.5.tgz python
-
Python3 实现爬取网站下所有URL方式
获取首页元素信息: 目标 test_URL:http://www.xxx.com.cn/ 首先检查元素,a 标签下是我们需要爬取得链接,通过获取链接路径,定位出我们需要的信息 soup = Bs4(reaponse.text, "lxml") urls_li = soup.select("#mainmenu_top > div > div > ul > li") 首页的URL链接获取: 完成首页的URL链接获取,具体代码如下: ''' 遇到不
-
Python 识别12306图片验证码物品的实现示例
1.PIL介绍以及图片分割 Python 3 安装: pip3 install Pillow 1.1 image 模块 Image模块是在Python PIL图像处理中常见的模块,主要是用于对这个图像的基本处理,它配合open.save.convert.show-等功能使用. from PIL import Image #打开文件代表打开pycharm中的文件 im = Image.open('1.jpg') #展示图片 im.show() 1.Crop类 拷贝这个图像.如果用户想粘贴一些数据
-
使用 Python 处理3万多条数据只要几秒钟
应用场景:工作中经常遇到大量的数据需要整合.去重.按照特定格式导出等情况.如果用 Excel 操作,不仅费时费力,还不准确,有么有更高效的解决方案呢? 本文以17个 txt 文本,3万多条数据为例,使用 Python 连接 MySQL 数据库,实现快速操作. 别人加班干的活,我的 Python 小助手几秒钟就搞定了! 本文主要包括以下三方面内容: 数据写入 数据去重 数据导出 将数据写入 MySQL 数据库 下图所示文件是本文的数据源: 我们的设想是:编写一个小程序,扔在这个文件夹里,双击后就可
-
java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion问题解决方法
读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵. DOM解析的特性就是读取xml文件转换为 dom树形结构,通过节点进行遍历. 这是W3c关于节点的概念 如果xml中包含有大量的数据,由于dom一次性把xml装入内存中的特性,所以dom不适合于包含大量数据的xml解析.当包含有大量xml的时候,用SAX进行解析比较节省内存. 下面是一个运用DOM进行解析xml文件的例子: xml文件结构如下: <?xm
-
python3爬取torrent种子链接实例
本文环境是python3,采用的是urllib,BeautifulSoup搭建. 说下思路,这个项目分为管理器,url管理器,下载器,解析器,html文件生产器.各司其职,在管理器进行调度.最后将解析到的种子连接生产html文件显示.当然也可以保存在文件.最后效果如图. 首先在管理器SpiderMain()这个类的构造方法里初始化下载器,解析器,html生产器.代码如下. def__init__(self): self.urls = url_manager.UrlManager() self.d
-
Python2和Python3中@abstractmethod使用方法
这篇文章主要介绍了Python2和Python3中@abstractmethod使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 抽象方法: 抽象方法表示基类的一个方法,没有实现,所以基类不能实例化,子类实现了该抽象方法才能被实例化. Python的abc提供了@abstractmethod装饰器实现抽象方法,下面以Python3的abc模块举例. @abstractmethod: 基类Foo的fun方法被@abstractmethod装
-
对Python2与Python3中__bool__方法的差异详解
学习Python面向对象编程的时候,遇到了一个很有意思的小问题.Python的__bool__方法不起作用的问题. 我反复读了我手中的教程,确认了我写的代码应该管用.可是在测试的时候却一直不通过,后来发现我实现的__bool__方法似乎并不是Python本身的接口. 代码如下: class Demo(): def __init__(self,value = 0): self.value = value def __bool__(self): return bool(self.value > 5)
-
Python2和Python3中urllib库中urlencode的使用注意事项
前言 在Python中,我们通常使用urllib中的urlencode方法将字典编码,用于提交数据给url等操作,但是在Python2和Python3中urllib模块中所提供的urlencode的包位置有些不同. 对于Python2 Python2中提供了urllib和urllib2两个模块. urlencode方法所在位置为: urllib.urlencode(values) # 其中values为所需要编码的数据,并且只能为字典 例如模拟登陆CSDN网站,示例程序如下 import url
-
python2与python3中关于对NaN类型数据的判断和转换方法
今天在对一堆新数据进行数据清洗的时候,遇到了一个这样的问题: ValueError: cannot convert float NaN to integer 一开始是这样的,我用的jupyter是python35的,使用DataFrame读入了数据,其中有一列是year,默认读入时是将year这一列转换为了float,所以就有了这样的现象: 年份都是float类型了,看得我强迫症都犯了.于是通过这样的代码来进行强转,于是就报了上面的错误了. df.year = [int(y) for y in
-
新手学习Python2和Python3中print不同的用法
在Python2和Python3中都提供print()方法来打印信息,但两个版本间的print稍微有差异 主要体现在以下几个方面: 1.python3中print是一个内置函数,有多个参数,而python2中print是一个语法结构: 2.Python2打印时可以不加括号:print 'hello world', Python3则需要加括号 print("hello world") 3.Python2中,input要求输入的字符串必须要加引号,为了避免读取非字符串类型发生的一些行为,不
-
Python2和Python3中print的用法示例总结
前言 最近在学习python,对于python的print一直很恼火,老是不按照预期输出.在python2中print是一种输出语句,和if语句,while语句一样的东西,在python3中为了填补python2的各种坑,将print变为函数,因此导致python3中print的一些使用和python2很不一样.下面就来给大家详细的总结了关于Python2和Python3中print的用法,话不多说了,来一起看看详细的介绍吧. 一.Python2中的print用法 在Python2 中 prin
-
python2 与 python3 实现共存的方法
1.现在我本机系统已内置python2.6 2.下载进行源码安装 复制链接下载到/root/mypackage,解压 接着 mkdir /usr/local/python3 然后在解压后的文件夹内执行以下命令,指定安装路径 ./configure --prefix=/usr/local/python3 然后 make 接着 make install 备注:如果中间有报错,就再试一次 进入安装路径查看以下 看来,都不用改文件名了 建立软链接,因为不能直接使用该目录下的命令 ln -s /usr/l
-
基于Python2、Python3中reload()的不同用法介绍
reload() 简介 作用:用于重新载入之前载入的模块 语法格式:reload(module) 参数:module为模块对象,必须已经被加载 返回值:返回模块对象 注意事项: 多次重复使用import语句时,不会重新加载被指定的模块,只是把对该模块的内存地址给引用到本地变量环境. reload()会重新加载已加载的模块,重新编译模块,重新执行模块级代码,但是__init__函数不再重复执行,原来已经使用的实例还是会使用旧的模块,而新生产的实例会使用新的模块:reload后还是用原来的内存地址:
-
python版本坑:md5例子(python2与python3中md5区别)
起步 对于一些字符,python2和python3的md5加密出来是不一样的. # python2.7 pwd = "xxx" + chr(163) + "fj" checkcode = hashlib.md5(pwd).hexdigest() print checkcode # ea25a328180680aab82b2ef8c456b4ce # python3.6 pwd = "xxx" + chr(163) + "fj"
-
Python2与python3中 for 循环语句基础与实例分析
下面的代码中python2与python3的print使用区别,大家注意一下.python3需要加()才行. 语法: for循环的语法格式如下: for iterating_var in sequence: statements(s) 流程图: 实例: #!/usr/bin/python # -*- coding: UTF-8 -*- for letter in 'jb51.net': # 第一个实例 print '当前字母 :', letter fruits = ['banana', 'app
随机推荐
- 免费开源百度编辑器(UEditor)使用方法
- 科普:多线程与异步的区别
- Lua编程示例(四):Lua标准库之表库、字符串库、系统库
- C++ 数据结构之水洼的数量算法
- IOS定制属于自己的个性头像
- 浅析Ajax的 原理及优缺点
- C++11新特性之智能指针(shared_ptr/unique_ptr/weak_ptr)
- 在Z-Blog中运行代码[html][/html](纯JS版)
- 基于socket.io和node.js搭建即时通信系统
- Yii编程开发常见调用技巧集锦
- JavaScript页面实时显示当前时间实例代码
- 两个Javascript小tip资料
- SQL SERVER中强制类型转换cast和convert的区别详解
- iis配置绑定二级域名的问题
- 使用nginx来负载均衡 本文在window与linux下配置nginx实现负载
- Python的IDEL增加清屏功能实例
- PHP-MySQL教程归纳总结
- 测试您的 PHP 水平的题目
- python 计算数组中每个数字出现多少次--“Bucket”桶的思想
- Springboot 使用 JSR 303 对 Controller 控制层校验及 Service 服务层 AOP 校验 使用消息资源文件对消息国际化