python继承

每周一个 Python 标准库 | unittest

自作多情 提交于 2020-01-22 03:41:04
技术博客: https://github.com/yongxinz/tech-blog 同时,也欢迎关注我的微信公众号 AlwaysBeta ,更多精彩内容等你来。 unittest 是 Python 自带的单元测试框架,可以用来作自动化测试框架的用例组织执行。 优点:提供用例组织与执行方法;提供比较方法;提供丰富的日志、清晰的报告。 unittest 核心工作原理 unittest 中最核心的部分是:TestFixture、TestCase、TestSuite、TestRunner。 下面我们分别来解释这四个概念的意思,先来看一张 unittest 的静态类图: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i73bqGc5-1579601045102)(D:\work\article\unittest.png)] 一个 TestCase 的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。元测试(unit test)的本质也就在这里,一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。 而多个测试用例集合在一起,就是 TestSuite,而且 TestSuite 也可以嵌套 TestSuite。

python自学1

喜你入骨 提交于 2020-01-21 23:56:05
在看python的视频资源自学 学了一点后觉得还是写点东西好,以后自己回顾也有东西看 面向对象 1. _del_方法: class dog : def _del_ ( self ) : print ( "over" ) dog1 = dog ( ) dog2 = dog1 del dog1 print ( "啊" ) 这一段代码的输出是这样的 啊 over 然鹅当代码改为 class dog : def _del_ ( self ) : print ( "over" ) dog1 = dog ( ) dog2 = dog1 del dog1 del dog2 print ( "啊" ) 输出结果就变成 over 啊 原因是系统在调用_del_方法之前有其他调用dog1的语句 (即引用计数大于0) 第一次的代码: 在dog1=dog()时引用计数为1 dog2=dog1时引用计数为2 下方del dog1后引用计数为1 再往下无语句调用dog1——系统退出程序——即引用计数为0——调用_del_函数 结论 :在程序中引用计数为0(即无语句调用时或者被删除后)时,_del_函数会被自动调用 如何查看一个对象的引用计数呢? 代码为 import sys sys . getrefcount(x) 使用方法 import sys class X : pass x = X ( ) sys .

五. python面向对象(多态 和metaclass=abc.ABCMeta)

▼魔方 西西 提交于 2020-01-21 14:40:31
一. 多态 多肽: 一种事物的多种形态 叫多肽 例如 动物(animal) 猫 狗 ....... # animal.py 文件 # 动物类 都有名字这个属性 和吃这个方法 class Animal(object): def __init__(self,name): self.name=name def eat(self): print(self.name+"吃1111111111111111") # cat.py文件 # 让定的猫这个属性去继承动这个方法 from animal import Animal class Cat(Animal): def __init__(self, name): # self.name=name super(Cat, self).__init__(name) # def eat() # print(self.name+"吃") # mouse.py文件 # 让mouse去继承动物这个类 from animal import Animal class Mouse(Animal): def __init__(self,name): #self.name=name super(Mouse,self).__init__(name) #def eat(): #print(self.name+"吃") # person.py文件 class Person

Django--模板层template

陌路散爱 提交于 2020-01-21 07:26:18
一 模版简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别。 也就是说,HTML被直接硬编码在 Python代码之中。 def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html) 尽管这种技术便于解释视图是如何工作的,但直接将HTML硬编码到你的视图里却并不是一个好主意。 让我们来看一下为什么: 对页面设计进行的任何改变都必须对 Python 代码进行相应的修改。 站点设计的修改往往比底层 Python 代码的修改要频繁得多,因此如果可以在不进行 Python 代码修改的情况下变更设计,那将会方便得多。 Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成。 设计者和HTML/CSS的编码人员不应该被要求去编辑Python的代码来完成他们的工作。 程序员编写 Python代码和设计人员制作模板两项工作同时进行的效率是最高的,远胜于让一个人等待另一个人完成对某个既包含 Python又包含 HTML 的文件的编辑工作。 基于这些原因

python自学篇九[ 函数(三):变量作用域+ATM+5个小练习]

风流意气都作罢 提交于 2020-01-21 05:01:56
python基础系列: python自学篇一[ Anaconda3安装 ] python自学篇二[ pycharm安装及使用 ] python自学篇三[ 判断语句if的使用 ] python自学篇四[ 基本数据类型和字符串常用处理 ] python自学篇五[ 列表 ] python自学篇六[ 元组 ] python自学篇七[ 字典+深拷贝与浅拷贝 ]描述 python自学篇八[ 循环:while+for+pass+range()+推导式 ] python自学篇九[ 函数(一):参数+对象 ] python自学篇九[ 函数(二):返回值return+yield+迭代器+生成器 ] python自学篇九[ 函数(三):变量作用域+ATM+5个小练习 ] python自学篇九[ 函数(四):递归函数+匿名函数+内置函数+高阶函数 ] python自学篇十[ 面向对象 (一) :面向对象概念+定义类+练习一] python自学篇十[ 面向对象 (二) :继承+多继承+类属性+实例属性] python自学篇十[ 面向对象 (三) :访问限制+类方法+静态方法] python自学篇十[ 面向对象 (四) :王者荣耀小游戏+模拟一个简单的银行进行业务办理的类] python自学篇十一[ 模块简介+模块制作+dir()函数+标准模块+包] python自学篇十二[ 文件:打开+读取+写入+3个习题

【Python】(十二)IO 文件处理

删除回忆录丶 提交于 2020-01-20 10:12:06
1.文件处理 读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。 读写文件前,先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。 读文件 要以读文件的模式打开一个文件对象,使用Python内置的 open() 函数,传入文件名和标示符: >> > f = open ( '/Users/michael/test.txt' , 'r' ) 标示符 ’r’ 表示读,这样,我们就成功地打开了一个文件。 如果文件不存在, open() 函数就会抛出一个 IOError 的错误,并且给出错误码和详细的信息告诉你文件不存在: >> > f = open ( '/Users/michael/notfound.txt' , 'r' ) Traceback ( most recent call last ) : File "<stdin>" , line 1 , in < module > FileNotFoundError : [ Errno 2 ] No such file or directory : '/Users/michael

【Python】(十一)异常处理

筅森魡賤 提交于 2020-01-20 00:28:31
文章目录 1.异常 2.异常处理 3.断言 1.异常 什么是异常 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。 一般情况下,在Python无法正常处理程序时就会发生一个异常。 异常是Python对象,表示一个错误。 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。 常见异常 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIteration 迭代器没有更多的值 GeneratorExit 生成器(generator)发生异常来通知退出 StandardError 所有的内建标准异常的基类 ArithmeticError 所有数值计算错误的基类 FloatingPointError 浮点计算错误 OverflowError 数值运算超出最大限制 ZeroDivisionError 除(或取模)零 (所有数据类型) AssertionError 断言语句失败 AttributeError 对象没有这个属性 EOFError 没有内建输入,到达EOF 标记 EnvironmentError 操作系统错误的基类 IOError 输入/输出操作失败 OSError 操作系统错误

Python魔法方法(一)

风流意气都作罢 提交于 2020-01-19 04:43:06
构造方法 我们最为熟知的基本的魔法方法就是 __init__ ,我们可以用它来指明一个对象初始化的行为。然而,当我们调用 x = SomeClass() 的时候, __init__ 并不是第一个被调用的方法。事实上,第一个被调用的是 __new__ ,这个 方法才真正地创建了实例。当这个对象的生命周期结束的时候, __del__ 会被调用。让我们近一步理解这三个方法: __new__(cls,[…) __new__ 是对象实例化时第一个调用的方法,它只取下 cls 参数,并把其他参数传给 __init__ 。 __new__ 很少使用,但是也有它适合的场景,尤其是当类继承自一个像元组或者字符串这样不经常改变的类型的时候。我不打算深入讨论 __new__ ,因为它并不是很有用, Python文档 中 有详细的说明。 __init__(self,[…]) 类的初始化方法。它获取任何传给构造器的参数(比如我们调用 x = SomeClass(10, ‘foo’) , __init__ 就会接到参数 10 和 ‘foo’ 。 __init__ 在Python的类定义中用的最多。 __del__(self) __new__ 和 __init__ 是对象的构造器, __del__ 是对象的销毁器。它并非实现了语句 del x (因此该语句不等同于 x.__del__())

Python中的接口类和抽象类

与世无争的帅哥 提交于 2020-01-19 03:52:30
Python中的接口和协议 Python语言中没有interface关键词,而且除了抽象基类,每个类都有接口:类实现或继承的公开属性(方法或数据属性)。 接口类: 面向对象中的继承有两种用途: 1)可以通过继承做到代码重用,并完成扩展; 2)接口继承 所谓的接口继承就是定义一个接口类Interface,接口类中定义了一些接口(就是函数,但这些函数都是没有具体的实现),子类继承接口类,并且实现接口中的功能。 接口只是定义了一些方法,而没有去实现,多用于程序设计时,只是设计需要有什么样的功能,但是并没有实现任何功能,这些功能需要被另一个类(B)继承后,由类B去实现其中的某个功能或全部功能。在python中接口由抽象类和抽象方法去实现,接口是不能被实例化的,只能被别的类继承去实现相应的功能。 抽象类 抽象类只能被继承,不能被实例化。如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性。 比如我们有香蕉的类,有苹果的类,有桃子的类,从这些类抽取相同的内容就是水果这个抽象的类,你吃水果时,要么是吃一个具体的香蕉,要么是吃一个具体的桃子。。。。。。你永远无法吃到一个叫做水果的东西。 python中,抽象类和接口类没有明确的界限,若是类中所有的方法都没有实现,则认为是一个接口,若是部分方法实现,则认为是一个抽象类

python2与python3的区别

左心房为你撑大大i 提交于 2020-01-19 02:22:22
1.print 在Python 2里, print 是一个语句。无论你想输出什么,只要将它们放在 print 关键字后边就可以。在Python 3里, print() 是一个函数。就像其他的函数一样, print() 需要你将想要输出的东西作为参数传给它。 样例: # python2 print 1, 2 + 3 # python3 print(1, 2 + 3) 2.range 与 xrange Python 2中有 range 和 xrange 两个方法。其区别在于,range返回一个list,在被调用的时候即返回整个序列; xrange返回一个迭代器iterator,在每次循环中生成序列的下一个数字。Python 3中不再支持 xrange 方法,Python 3中的 range 方法就相当于 Python 2中的 xrange 方法。 样例: # python2 print range(6) # [0, 1, 2, 3, 4, 5] # python3 print(range(6)) #range(0, 6) # python2的range(6)返回的是列表,python3返回的是迭代器类型(可以用list进行强转列表) 3.运算符 ①python2的 <> 相当于 != ,python3去除了 <> ,全部改用 != ②python2的 / 是整除,python3的 /