python继承

通过 Python 理解 Mixin 概念

跟風遠走 提交于 2019-12-06 12:42:24
Mixin 的概念 Mixin 即 Mix-in ,常被译为“混入”,是一种编程模式,在 Python 等面向对象语言中,通常它是实现了某种功能单元的类,用于被其他子类继承,将功能组合到子类中。 利用 Python 的多重继承,子类可以继承不同功能的 Mixin 类,按需动态组合使用。 当多个类都实现了同一种功能时,这时应该考虑将该功能抽离成 Mixin 类。 举个例子 定义一个简单的类: class Person: def __init__(self, name, gender, age): self.name = name self.gender = gender self.age = age 我们可以通过调用实例属性的方式来访问: p = Person("小陈", "男", 18) print(p.name) # "小陈" 然后我们定义一个 Mixin 类: class MappingMixin: def __getitem__(self, key): return self.__dict__.get(key) def __setitem__(self, key, value): return self.__dict__.set(key, value) 这个类可以让子类拥有像 dict 一样调用属性的功能 我们将这个 Mixin 加入到 Person 类中: class

python -- unittest测试用例函数无法传参的处理方法(ddt)

馋奶兔 提交于 2019-12-06 10:57:51
1、超继承   重写测试用例类的init方法,如下所示。 import requests import unittest class XiaoheiCases(unittest.TestCase): def __init__(self,methodName,url,data,cookies=None): super(XiaoheiCases,self).__init__(methodName) self.url = url self.data = data self.cookies = cookies 2、ddt模块 ''' ddt结合unittest来进行数据处理的第三方库,很强大 安装pip install ddt ddt需要和unittest或pytest结合使用 ''' from ddt import ddt,data,unpack import unittest test_print = [1,3] test_b = [[1,2,3],[4,5,6]] @ddt #装饰测试类 class TestMath(unittest.TestCase): @data(test_print) #装饰测试函数,通过这种方式传参,如果通过*test_data传参,则有几个参数,执行几次测试用例 def test_print(self,item): print('item:{0}'

python之super()超继承的使用

 ̄綄美尐妖づ 提交于 2019-12-06 10:20:08
超继承什么时候用,子类重写了父类的方法,但是子类还想用之前被重写之前父类的方法,就可以使用超继承。这是一种贪婪的继承。 看下面一段代码,定义了一个数学方法类MathMethod01,又定义了子类的数学方法类MathMethod02,继承了MathMethod01里面的实例属性,并重写了父类的add方法。 上面我子类重写了父类的add方法,按道理说父类的add方法会被覆盖,就不能使用父类的add方法。但是使用super()函数不但可以调用本身的add方法,而且还可以调用父类的add方法,这是一种贪婪的继承。 看调用结果: 来源: https://www.cnblogs.com/xiamaojjie/p/11977151.html

python-并发编程

久未见 提交于 2019-12-06 10:20:01
并发编程 并发(伪):由于执行速度特别快,人感觉不到 并行(真):创建10个人同时操作 线程 开销非常小 是操作系统可以调度的最小单位(内存共享) 能利用多个CPU 由操作系统控制 Cpython解释器下 由于GIL(全局解释器锁)的问题导致了一个进程中的多个线程无法利用多核 数据不安全 += -= *= /= 多个线程同时操作全局/内存外部的变量 需要自己加锁,在+= 操作前后添加lock.acquire()和lock.release()即可 append pop extend 你能想到的基础数据类型自带的方法都是数据安全的同时操作全局内存中的数据会产生数据的不安全 单进程,单线程的应用程序 print('666') 到底什么是线程?什么是进程 Python自己没有这玩意,Python中调用的操作系统的线程和进程(伪线程) 多线程 工作的最小单元 共享进程中所有资源 每个线程可以分担一点任务,最终完成最后的结果 python多线程原理:python的多线程实际是一个假的多线程(多个线程在1核CPU上运行,进行快速的切换导致错觉为同时执行) 代码 import threading def func(arg): print(arg) th = threading.Thread(target=func) th.start() print('end') 一个应用程序:软件

Python——装饰器(Decorator)

≯℡__Kan透↙ 提交于 2019-12-06 10:19:31
1.什么是装饰器? 装饰器放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上。和这个函数绑定在一起。在我们调用这个函数的时候,第一件事并不是执行这个函数,而是将这个函数做为参数传入它头顶上这顶帽子,这顶帽子我们称之为装饰器 。 2.装饰器的使用方法 @ 符号是装饰器的语法糖,一般情况下我们使用@函数名或者@类名来使用装饰器。 3.函数装饰器 函数装饰器 = 高阶函数 + 嵌套函数 + 闭包 • 高阶函数:外层函数可以接收内层函数作为参数 • 函数嵌套 :将某函数作为另一函数的参数使用 • 闭包 :能够使用外部函数的自由变量的函数 (1)不带参数的函数装饰器(日志打印器) 实现的功能是:在函数执行前,先打印一行日志“before”,在函数执行完,再打印一行日志“after”。 代码如下: 1 #coding=utf-8 2 # -*- coding=utf-8 -*- 3 #不带参数装饰器 4 def dec1_outer(func): 5 6 def dec1_inner(): 7 print("Before") 8 #函数真正执行的地方 9 func() 10 print("After") 11 12 return dec1_inner 13 14 @dec1_outer 15 def func(): 16 print('func') 17 18 func()

Python 学习笔记

时光怂恿深爱的人放手 提交于 2019-12-06 08:38:34
背景:今年开始搞 Data science ,学了 python 小半年,但一直没时间整理整理。这篇文章很基础,就是根据廖雪峰的 python 教程 整理了一下基础知识,再加上自己的一丢丢拓展,方便自己以后查阅。 一、基础 1、简介 (1) 历史 Python 是著名的“龟叔” Guido van Rossum (荷兰人)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。 (2) 解释型语言 Python是 解释型语言 ,跟 C 这种 编译型语言 相比: (1)第一个缺点就是 运行速度慢 ,在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。 但是大量的应用程序不需要这么快的运行速度,因为用户根本感觉不出来。 (2)第二个缺点就是 代码不能加密 。如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。 但目前的互联网时代,靠卖软件授权的商业模式越来越少了,靠网站和移动应用卖服务的模式越来越多了,后一种模式不需要把源码给别人。 2、安装 以

python中的单元测试模块unittest

我的未来我决定 提交于 2019-12-06 07:09:02
unittest的属性: 该文以思维导图的形式描述unittest的重要属性。 其中前四个是unittest最核心的三个属性。 testcase:测试用例; testsuite:测试套件,多个测试用例组成一个测试套件; test runner:执行测试用例,该类中的run()方法会执行testsuite/testcase中的run()方法。测试的结果会保存在testresult中。 还有一个很重要的就是fixture,看着是挺陌生的,其实就是一个测试用例执行之前环境的准备和执行之后环境的销毁。 三、实例: 首先准备一些待测方法,functions.py: def fun_div(x): return x/2 def fun_add(x): return x+2 def fun_minus(x): return x-2 def fun_multi(x): return x*2 接下来写一些测试用例来测这些方法,test.py import unittest from functions import fun_add,fun_minus,fun_multi,fun_div class TestFun(unittest.TestCase): times = 0 @classmethod def setUpClass(cls): print('setUpclass') def setUp

小知识点记录

自闭症网瘾萝莉.ら 提交于 2019-12-06 05:39:44
JsonP // 利用script的src属性绕过浏览器的同源策略,但是只能发GET请求 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <p> <input type="button" onclick="Jsonp1();" value='提交'/> </p> <p> <input type="button" onclick="Jsonp2();" value='提交'/> </p> <script type="text/javascript" src="jquery-1.12.4.js"></script> <script> function Jsonp1(){ var tag = document.createElement('script'); tag.src = "http://c2.com:8000/test/"; document.head.appendChild(tag); document.head.removeChild(tag); }      function list(data){          console.log(data)      } function Jsonp2(){ $.ajax({ url:

python pickle 模块的使用

 ̄綄美尐妖づ 提交于 2019-12-06 05:34:12
python pickle 模块的使用 用于序列化的两个模块   json:用于字符串和Python数据类型间进行转换   pickle: 用于python特有的类型和python的数据类型间进行转换   json提供四个功能:dumps,dump,loads,load   pickle提供四个功能:dumps,dump,loads,load pickle可以存储什么类型的数据呢? 所有python支持的原生类型:布尔值,整数,浮点数,复数,字符串,字节,None。 由任何原生类型组成的列表,元组,字典和集合。 函数,类,类的实例 pickle模块中常用的方法有: 1. pickle.dump(obj, file, protocol=None,) 必填参数obj表示将要封装的对象 必填参数file表示obj要写入的文件对象,file必须以二进制可写模式打开,即“wb” 可选参数protocol表示告知pickler使用的协议,支持的协议有0,1,2,3,默认的协议是添加在Python 3中的协议3。    Protocol version 0 is the original “human-readable” protocol and is backwards compatible with earlier versions of Python. Protocol version 1

从Python安装到语法基础,这才是初学者都能懂的爬虫教程

拥有回忆 提交于 2019-12-06 05:32:41
Python和PyCharm的安装:学会Python和PyCharm的安装方法 变量和字符串:学会使用变量和字符串的基本用法 函数与控制语句:学会Python循环、判断语句、循环语句和函数的使用 Python数据结构:理解和使用列表、字典、元组和集合 Python文件操作:学习使用Python建立文件并写入数据 Python面向对象:了解Python中类的定义和使用方法 01 Python与PyCharm安装 “工欲善其事,必先利其器”,本节介绍Python环境的安装和Python的集成开发环境(IDE)PyCharm的安装。 Python安装(Windows、Mac和Linux) 当前主流的Python版本为2.x和3.x。由于Python 2第三方库更多(很多库没有向Python 3转移),企业普遍使用Python 2。如果作为学习和研究的话,建议使用Python 3,因为它是未来的发展方向。所以本教程选择Python 3的环境。 1.1 Windows中安装Python 3 在Windows系统中安装Python 3,请参照下面的步骤进行。 打开浏览器,访问Python官网( https://www.python.org/ )。 光标移动至Downloads链接,单击Windows链接。 根据自己的Windows版本(32位或64位),下载相应的Python 3.5版本