python继承

Python 【Debug排除程序故障】

白昼怎懂夜的黑 提交于 2019-11-26 20:19:12
debug #排除程序故障 print()函数常和#号注释结合在一起用来debug 多行注释有两种快捷操作: 1、在需要注释的多行代码块前后加一组三引号''' 2、选中代码后使用快捷键操作:Windows快捷键是ctrl+/,Mac为cmd+/,适用于本地编辑器) 一种异常处理的机制,可以在异常出现时即时捕获,然后内部消化掉,让程序继续运行 try…except…语句 Python的所有报错类型 https://www.runoob.com/python/python-exceptions.html #################################################################################### 总结 针对知识点不熟造成的bug,要记得多复习,查阅笔记,针对性地做练习掌握用法。 针对思维不清的bug,要多用print()函数和#注释一步步地排查错误。 针对容易被忽略的例外情况从而被动掉坑的bug,可以用try...except语句让程序顺利运行。 ################################################################################### BaseException: 包含所有built-in exceptions 所有内置异常的基类

python 鸭子类型

跟風遠走 提交于 2019-11-26 19:41:10
调用不同的子类将会产生不同的行为,而无须明确知道这个子类实际上是什么,这是多态的重要应用场景。而在python中,因为鸭子类型(duck typing)使得其多态不是那么酷。 鸭子类型是动态类型的一种风格。在这种风格中,一个对象有效的语义, 不是由继承自特定的类或实现特定的接口 ,而是由" 当前方法和属性的集合 "决定。这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试,“鸭子测试”可以这样表述:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。” 在鸭子类型中, 关注的不是对象的类型本身,而是它是如何使用的 。例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为"鸭子"的对象,并调用它的"走"和"叫"方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的"走"和"叫"方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。任何拥有这样的正确的"走"和"叫"方法的对象都可被函数接受的这种行为引出了以上表述,这种决定类型的方式因此得名。 class Duck(): def walk(self): print('I walk like a duck') def swim(self): print('i swim like a duck') class Person():

用PYTHON快速开发一个实用的SOCKET服务器【转】

佐手、 提交于 2019-11-26 18:33:20
原文:http://www.cnblogs.com/WuErPIng/archive/2005/10/29/264671.html 首先,要明白不是所有的socket服务都需要高性能。如果要求高性能,使用IOCP或EPoll模式用C/C++来完成,直接用API写,用ACE的proactor封装来完成是比较恰当的行为。但当性能不是主要问题时,用Python来写socket服务,并享受高的开发效率将是一件快乐的事。下面,是用python完成的一个每thread/connect的一个echo服务。 经常的,在写一段Python代码时,我会先打开《Python Cookbook》(O'Reilly)一书,看看有没有所需要的(这也是保证效率的一种方式),下面的代码就是摘自此书。 1 import SocketServer 2 class MyHandler(SocketServer.BaseRequestHandler): 3 def handle(self): 4 while 1: 5 dataReceived = self.request.recv(1024) 6 if not dataReceived: break 7 self.request.send(dataReceived) 8 myServer = SocketServer.ThreadingTCPServer(( ''

python学习第8天笔记

假如想象 提交于 2019-11-26 18:17:00
1 类中的三个预定义函数   1.1 __repr__(self),定义了类的实例后,如果直接打出类名,则会输出此函数的返回值   1.2 __str__(self),定义了类的实例后,如果使用print(类名),则会输出此函数的返回值   1.3 __del__(self),析构函数,用来删除实例 2 定义类时的两类变量   2.1 只跟实例关联的变量,比如建立了一个书的类,那么书名,价格,作者这些都是和实例直接关联,那么在初始化函数中给这些变量赋值时,需要使用self.变量的方式   2.2 跟实例无关联的变量,比如想知道实例化了几本书,那么定义的这个变量就不能使用self.变量的方式,而应该在初始化函数前定义变量,同时在初始化函数中做计数时,使用类名.变量的方式   注:对于2.2中的处理方式,通过实例对象调用无关联对象和通过类名调用无关联对象,其值是一样的,但是如果对实例对象调用无关联对象值进行修改,此时类名调用的值没有变化,而实例对象调用的值则变成了修改后的值 3 类里面的两类函数   3.1 跟实例有关,定义时在参数列表中有self   3.2 跟实例无关,定义时在参数列表中无self 4 对于类中一些不能随意修改的方法,可以将其变成属性,方法就是加修饰符,从而不能进行赋值和删除等。比如: @property def age(self): Return 5 @age

关于Python的线程

纵然是瞬间 提交于 2019-11-26 18:16:28
我们在做软件开发的时候很多要用到多线程技术。例如如果做一个下载软件象flashget就要用到、象在线视频工具realplayer也要用到因为要同时下载media stream还要播放。其实例子是很多的。 线程相对进程来说是“轻量级”的,操作系统用较少的资源创建和管理线程。程序中的线程在相同的内存空间中执行,并共享许多相同的资源。 在 python 中如何创建一个线程对象: 如果你要创建一个线程对象,很简单,只要你的类继承 threading.Thread ,然后在 __init__ 里首先调用 threading.Thread 的 __init__ 方法即可: import threading class mythread(threading.Thread): def __init__(self, threadname): threading.Thread.__init__(self, name = threadname) .... 这才仅仅是个空线程,我可不是要他拉空车的,他可得给我干点实在活。很简单,重写类的 run() 方法即可,把你要在线程执行时做的事情都放到里面 import threading import time class mythread(threading.Thread): def __init__(...): .... def run(self): for

python singleton 4种单例

*爱你&永不变心* 提交于 2019-11-26 17:41:34
def singleton(cls, *args, **kwargs): instances = {} def inner(cls, *args, **kwargs): if cls not in instances: instances[cls] = cls(*args, **kwargs) return instances[cls] return inner @singleton class Test1: pass # 推荐使用这种 简单好用 线程安全 # =========================================================== import threading class Singleton: def __init__(self, cls): self.__cls = cls self.__instance = None self._lock = threading.Lock() def __call__(self, *args, **kwargs): self._lock.acquire() if self.__instance is None: self.__instance = self.__cls(*args, **kwargs) self._lock.release() return self.__instance

十六、python面向对象基础篇

馋奶兔 提交于 2019-11-26 17:40:24
面向对象基础: 在了解面向对象之前,先了解下变成范式: 编程范式是一类典型的编程风格,是一种方法学 编程范式决定了程序员对程序执行的看法 oop中,程序是一系列对象的相互作用 python支持多种编程范式,面向过程,面向对象,面向切面(装饰器部分)等 -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- OOP思想: 面向对象的基本哲学,世界由具有各自运动规律和内部状态的对象组成,对象之间的相互作用和通讯构成了世界。 唯一性,世界上没有两片相同的树叶,同样的没有两个相同的对象 分类性,分类是对现实世界的抽象 三大特性,继承,多态和封装 老祖宗都是打鱼的,我也是打鱼的 ====》继承 老祖宗用木头插,我用渔网捕鱼 ====》多态 人家找我借100块钱,我从银行拿100块钱给它,被必要告诉它我银行里有多少钱 ======》封装 -----------------------------------------------------

十七、Python面向对象之继承

泄露秘密 提交于 2019-11-26 17:40:15
在面向对象,继承是一个很重要的特性 子类与父类,子类是对父类的一种扩展,在父类的属性和方法上进行一些扩展 示例:没带继承 #定义一个带编号和状态的门的类 class Door(object): def __init__(self,num,status): self.num = num self.status = status def open(self): self.status = 'open' def close(self): self.status = 'close' #定义一个可以锁的门的类 class Lockable(object): def __init__(self,num,status,locked): self.num = num self.status = status self.locked = locked def open(self): if not self.locked: #如果没有锁的话,那么我就打开它 self.status = 'open' else: print "the door is locked" def close(self): self.status = 'close' ====================================================================== ===========

Python基础(一)

放肆的年华 提交于 2019-11-26 17:35:51
一、Python的简介 1、Python的由来与版本 1.1 python的由来   python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。 1.2 python版本   目前Python的主要版本为Python2.7与Python3.6 。   Python2版本到2020年就不再维护。 2、Python是什么样的语言 编程语言主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,我们一起来看一下。 2.1 编译型语言和解释型语言    编译型语言 :当用户写完一段代码需要执行的时候,由编译器先把整段代码一次性编译成计算机能看懂的二进制文件,然后再执行。这个过程中,如果用户写的代码出错了,编译器就得整段从头开始编译,只是几行或者几页代码的情况下还感觉不出来,但是如果代码由成千上万行甚至上亿行,可想而知,会浪费很多时间,导致开发速度慢。而且,他不是跨平台的,编译过后的代码在不同操作系统上就无法执行。他的优点是运行快,因为一旦编译成功,每次调用只需直接执行即可   编译型语言的代表:C语言、C++语言    解释型语言: 当用户写完一段代码需要执行的时候

python中关于OOP的常用术语

家住魔仙堡 提交于 2019-11-26 17:07:06
一、python中关于OOP的常用术语 1.1抽象/实现 抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于描绘程序结构,从而实现这种模型。抽象不仅包括这种模型的数据属性,还定义了这些数据的接口。 对某种抽象的实现就是对此数据及与之相关接口的现实化(realization)。现实化这个过程对于客户 程序应当是透明而且无关的。 1.2封装/接口 封装描述了对数据/信息进行隐藏的观念,它对数据属性提供接口和访问函数。通过任何客户端直接对数据的访问,无视接口,与封装性都是背道而驰的,除非程序员允许这些操作。作为实现的 一部分,客户端根本就不需要知道在封装之后,数据属性是如何组织的。在Python中,所有的类属性都是公开的,但名字可能被“混淆”了,以阻止未经授权的访问,但仅此而已,再没有其他预防措施了。这就需要在设计时,对数据提供相应的接口,以免客户程序通过不规范的操作来存取封装的数据属性。 注意:封装绝不是等于“把不想让别人看到、以后可能修改的东西用private隐藏起来” 真正的封装是,经过深入的思考,做出良好的抽象,给出“完整且最小”的接口,并使得内部细节可以对外透明 (注意:对外透明 的意思是 , 外部调用者可以顺利的得到自己想要的任何功能, 完全意识不到内部细节的存在) 1.3合成 合成扩充了对类的描述,使得多个不同的类合成为一个大的类