python继承

python --- Socketserver N部曲(1)

只愿长相守 提交于 2019-12-10 16:30:22
曲一 socketserver 是为了简化服务器端开发而产生的,是一个高级的标准库。(背景介绍完毕,开始干) 一些概念 来自源码的一张图片,简洁又 FengSao      +------------+ | BaseServer | +------------+ | v +-----------+ +------------------+ | TCPServer |------->| UnixStreamServer | +-----------+ +------------------+ | v +-----------+ +--------------------+ | UDPServer |------->| UnixDatagramServer | +-----------+ +--------------------+ 这是 socketserver 的一个基本框架, BaseServer 是基类,是不可以初始化的。然后我们可以利用 BaseServer 的子类就是下面的四个,来实例化我们需要的服务器类型。(本人太菜只知道一点TCP的相关知识,所以从 TCPserver 入手学习)。 看到这个图开始还是很开心的,以为就这图上的5个类,结果大神写的源码把我一个英语不好的“澜”差点看哭了。我开始发现没那么简单,有好多的类,好多好多的类! 一行一行的看绝对懵逼

python描述符\get/set/delete,init/new/call,元类

妖精的绣舞 提交于 2019-12-10 16:24:15
1.描述符__get__, set , delete 描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了____get__(), set (), delete ()中的一个,这也被称为描述符协议 ** get **():调用一个属性时,触发 ** set **():为一个属性赋值时,触发 ** delete **():采用del删除属性时,触发 这三者来对于类的属性生成一个类,然后对一个新类立面的特征进行调用方法 使用方法 class FooSet: def __get__(self, instance, owner): print('你调用了该方法') def __set__(self, instance, value): print('你修改了') def __delete__(self, instance): print('你删除了') class Foo: name = FooSet() foo = Foo() #调用生成对象的属性 print(foo.name) #修改生成对象的属性 foo.name = 123 #删除生成对象的属性 del foo.name 包含这三个方法的新式类称为描述符,由这个类产生的实例进行属性的调用/赋值/删除,并不会触发这三个方法 2. init ,_ new , call __new__方法的第一个参数是这个类

python 语言入门

妖精的绣舞 提交于 2019-12-10 09:27:05
文章目录 python 基础篇 一. 运算符 1. 算术运算符 2. 比较运算符 3. 赋值运算符 4. 逻辑运算符 5. 成员运算符 6. 条件语句 7. 循环 8. 大杂烩 二. 列表(中括号) 三. 元组 四.字典 五.函数 六.模块 七.文件读写 八.异常处理 九.访问excel的模块openpyxl 十.大杂烩 进阶篇 一. 面向对象 1. 类 2. 构造方法和析构方法 3. 类的继承 私有变量和方法 二. python操作数据库 1. mysql以及sql语句基础 三. 多线程 实战篇 在当前类的函数里调用函数范围外,类里面的变量,要加self 在当前类调用其他类,要先引进和实例化 用python正则表达式提取字符串 将list转化为整数或者str python 基础篇 一. 运算符 1. 算术运算符 a+b,a-b,a-b,a*b,a/b a%b,a**b,a//b 2. 比较运算符 假设a=10,b=20 (a==b)返回false;(a!=b)返回true (a>b)返回false; (a<b)返回true (a>=b)返回false; (a<=b)返回true 3. 赋值运算符 假设a=10,b=20 c=a+b c+=a等于c=c+a c-=a等于c=c-a c*= a,c/= a c%=a ,c**=a,c //=a ) 解:a,b=b,a 4. 逻辑运算符

python 面向对象

别等时光非礼了梦想. 提交于 2019-12-10 08:31:49
# 面向对象 """ 面向对象特点 1.封装: 依据功能需求将某些属性与方法封装到一个类中 2.继承: 实现代码的重复调用,相同的功能调用不需要重复编写 3.多态: 不同的对象调用相同的类方法,产生不同的执行结果 面向对象的基本知识点 类: 描述具有相同的属性和方法的对象的集合,具有抽象性,不能直接使用,主要职责是创建对象 对象:通过类定义的,具有属性与方法的具体实例,可以使用 方法:类中定义的函数 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。 局部变量:定义在方法中的变量,只作用于当前实例的类。 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。 实例化:创建一个类的实例,类的具体对象。 在程序开发中,应该 先有类,再有对象 类和对象的关系: 类是模板,对象是根据类这个模板创建出来的 类只有一个,而对象可以有很多个 类中定义了什么属性和方法,对象中就有什么属性和方法

Python 面向对象(初级篇)

♀尐吖头ヾ 提交于 2019-12-10 04:00:20
概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 while True : if cpu利用率 > 90 % : #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 硬盘使用空间 > 90 % : #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 内存占用 > 80 % : #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 随着时间的推移,开始使用了函数式编程,增强代码的重用性和可读性,就变成了这样: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def 发送邮件(内容) #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 while True : if cpu利用率 > 90 % : 发送邮件( 'CPU报警' ) if 硬盘使用空间 > 90 % : 发送邮件( '硬盘报警' ) if 内存占用 > 80 % : 发送邮件( '内存报警' ) 今天我们来学习一种新的编程方式

Python2.x与3​​.x版本区别

ぃ、小莉子 提交于 2019-12-10 02:18:49
Python的3​​.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。 为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。 许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。 为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。 新的Python程式建议使用Python 3.0版本的语法。 除非执行环境无法安装Python 3.0或者程式本身使用了不支援Python 3.0的第三方库。目前不支援Python 3.0的第三方库有Twisted, py2exe, PIL等。 大多数第三方库都正在努力地相容Python 3.0版本。即使无法立即使用Python 3.0,也建议编写相容Python 3.0版本的程式,然后使用Python 2.6, Python 2.7来执行。 Python 3.0的变化主要在以下几个方面: print 函数 print语句没有了,取而代之的是print()函数。 Python 2.6与Python 2.7部分地支持这种形式的print语法。在Python 2.6与Python 2.7里面,以下三种形式是等价的:

Python开发第一篇 基础篇(上)

青春壹個敷衍的年華 提交于 2019-12-10 01:45:51
一.python版本间的差异:     1.1:2.x与3.x版本对比 version 2.x 3.x print print " "或者print()打印都可以正常输出 只能print()这种形式打印,否则会出现 SyntaxError input raw_inut input:输出原生的数据类型,输入什么类型的值,就输出什么类型 raw_input:全部以字符串形式输出 3.x取消了raw_input方法,只能使用input() 方式提示输入字符串, 该方法和2.x版本的raw_input() 如果想要实现与2.x input()输出原生数据类型的值, 可以使用eval(input()) class 2.x支持新式类,和经典类,使用新式类时,类继承顺序会影响最终继承的结果 必须使用新式类,解决了类间继承顺序问题 / 例如:1/2,2.x输出的值为0 例如:1/2 3.x输出的值为0.5          1.2:python数据类型       int  有符号整形,如:1,11,111,-1,-111 ... ,2.x范围在-2**31~2**31-1之间,取决于操作系统,不会小于这个范围       float  浮点型,如:1.11.1.111,-1.111 ...       str  字符串,如:'hello' , 'python' , '1' , 'string'

Python:用户自定义异常

江枫思渺然 提交于 2019-12-09 19:53:48
Python:用户自定义异常 :https://www.cnblogs.com/ywxbbbbb/p/9958613.html 实际开发中,有时候系统提供的异常类型不能满足开发的需求。这时候你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承。 1.自定义异常类型 #1.用户自定义异常类型,只要该类继承了Exception类即可,至于类的主题内容用户自定义,可参考官方异常类 class TooLongExceptin(Exception): "this is user's Exception for check the length of name " def __init__(self,leng): self.leng = leng def __str__(self): print("姓名长度是"+str(self.leng)+",超过长度了") 2.如何手动抛出异常:raise 系统的自带的异常只要触发会自动抛出,比如NameError,但用户自定义的异常需要用户自己决定什么时候抛出。 raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。大多数的异常的名字都以"Error"结尾,所以实际命名时尽量跟标准的异常命名一样。 #1.用户自定义异常类型

Python staticmethod和classmethod

巧了我就是萌 提交于 2019-12-09 19:39:36
staticmethod, classmethod 分别被称为静态方法和类方法。 staticmethod 基本上和一个全局函数差不多,只不过可以通过类或类的实例对象(python里说光说对象总是容易产生混淆, 因为什么都是对象,包括类,而实际上类实例对象才是对应静态语言中所谓对象的东西)来调用而已, 不会隐式地传入任何参数。这个和静态语言中的静态方法比较像。 classmethod 是和一个class相关的方法,可以通过类或类实例调用,并将该class对象(不是class的实例对象)隐式地 当作第一个参数传入。就这种方法可能会比较奇怪一点,不过只要你搞清楚了python里class也是个真实地 存在于内存中的对象,而不是静态语言中只存在于编译期间的类型,就好办了。 正常的方法就是和一个类的实例对象相关的方法,通过类实例对象进行调用,并将该实例对象隐式地作为第一个参数传入,这个也和其它语言比较像。 区别: 类方法需要额外的类变量cls,当有之类继承时,调用类方法传入的类变量cls是子类,而不是父类。类方法和静态方法都可以通过类对象和类的 实例对象访问。 ①静态方法 >>> class Foo: str = "I'm a static method." def bar(): print Foo.str bar = staticmethod(bar) >>> Foo.bar() I'm

Python 类的继承

≡放荡痞女 提交于 2019-12-09 18:31:39
本质上类的相关用法是面向对象语言非常精彩的地方,自己需要阅读别人的代码,因为现在总是写自己的代码,不借鉴别人的代码是很难获得提高的。 本文未成体系,主要面对的是工程上实际需要解决的问题。 1、子类调用父类函数 情况一:子类不重写__init__()方法,实例化子类后,会自动调用父类的__init__()的方法。 情况二:子类重写__init__()方法且不需要调用父类的方法,则子类直接定义自己的__init__()函数,初始化后将不会调用父类的__init__()的方法。 情况三:子类需要重写__init__()方法,且调用父类的方法: 若此时使用的python语言版本为python3,可使用super关键词。 class Person ( object ) : def __init__ ( self ) : self . name = "Tom" def getName ( self ) : return self . name class Student ( Person ) : def __init__ ( self ) : super ( Student , self ) . __init__ ( ) self . age = 12 def getAge ( self ) : return self . age if __name__ == "__main__" : stu