面向对象&网络编程
2018-08-07 11:17:11 0 举报
AI智能生成
路飞学城第三模块思维导图
作者其他创作
大纲/内容
网络编程
网络基础知识
计算机基础
计算机应用
实现功能
操作系统
硬件的操作封装好后给应用程序调用
计算机硬件
具体执行程序的指令
C/S架构
客户端Client
服务端Server
网络协议
网络协议的定义
计算机与计算机之间的互相通信需要联网,需要底层的物理介质和通信的标准
OSI-7层
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
OSI-5层
应用层
传输层
传输层详解(TCP)
三次握手
1.客户端对服务端发送同步请求(建立连接通道)
2.服务端响应后,发送同步请求(建立连接通道)和发送确认数据(这里的两个请求被合并成一个了)
3.客户端向服务端发送确认数据
四次挥手
1.客户端发送端口结束包给服务端
2.服务端收到以后返回确认信息给客户端
3.服务端发送端口结束包给客户端
4.客户端确认信息返回给服务端
三次握手和四次挥手的区别
四次挥手的过程中,服务端返回给客户端的确认信息之后不会立刻关闭,有可能会继续给客户端发送数据,所以必须得有四次挥手
网络层
数据链路层
物理层
TCP协议
流式协议:TCP协议,数据可靠,消耗较多资源
TCP:tcp的协议可靠是因为每次发送数据的时候都会发送确认信息,如果未收到确认信息就会再发送一次,所以信息不容易丢失
UDP协议
数据报协议:UDP协议 数据不可靠,消耗较少资源
UDP:不具有确认信息回复的功能,直接发送数据,如果数据丢失不会再重复发送
socket套接字
socket定义
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口
socket家族
套接字家族的名字:AF_UNIX
套接字家族的名字:AF_INET【常用】
socket工作流程
服务端
初始化Socket
端口绑定(bind)
端口进行监听(listen)
调用accept阻塞,等待客户端连接
客户端
初始化Socket
创建连接(coonect)
粘包现象
粘包的定义
多个包的数据粘到一起了,在管道里根本不区分数据,流式数据传输的特性,所有数据全部传到一起不做任何区分
send和recv的实现原理
send
send只是拷贝给自己的操作系统的内存,send对于应用程序来说不过是完成了给内存的传输
recv
1.数据接收,放到服务端的缓存中
2.从缓存中调取数据,解析发给应用程序
面向对象
面向对象初级
面向对象编程
面向对象的定义
对象就是特征与技能的组合
面向对象的优点
可扩展性强,面向对象只能解决扩展性,但是软件开发里可扩展性只是一部分,掌握面向对象是开发的一部分
面向对象的缺点
简单的问题会变的复杂化,编程的复杂度高,容易出现设计的问题
应用场景
用户需求经常变化的场景,互联网应用、游戏、企业内部的应用(办公系统)等经常发生需求变更的场景
类与对象
类的定义
类就是一系列对象的相似特征与技能的结合体
注意:站在不同角度得到的分类是不一样的
如何使用类
类的属性
数据属性
针对类内部定义的变量
函数属性
针对类内部定义的函数
类的方法
增
class_name.func = 'New'
删
del class_name.func = 'New'
改
class_name.func = 'Change'
查
print(class_name.__dict__)
对象的定义
类的实例化产生
如何使用对象
生成对象
实例化
__new__生成新对象
__init__初始化对象
调用返回值
对象的方法
增
obj.Name = 'new name'
删
del obj.Name = 'new name'
改
obj.Name = 'name'
查
print(obj.__dict__)
属性查找与绑定方法
类的属性
类的数据属性
所有的对象都有,公有方法,指向同一个内存地址
类的函数属性
对象调用就有,私有方法,绑定给对象,不同对象不同内存地址
对象函数执行顺序
由内而外,先找自己,再找类,再往外找
一切皆对象
对象就在那里,存在,或者不存在,都是对象
面向对象扩展性的优点
数据和处理数据功能相结合
类的三大特性
继承
继承的定义
继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可以成为基类或超类,新建的类成为派生类或子类
继承的种类
单继承
单向继承
多继承
多项继承,顺序从左往右
继承的实现原理
经典类
只出现在Python2中
深度优先
新式类
广度优先
Python3默认继承object
子类重用父类
指定类名调用
super
依赖继承关系
super()方法并不是找父类,而是根据MRO列表去执行顺序!即使看上去没有继承关系的也必须去根据MRO列表执行
多态
多态的定义
一类事物有多种形态
多态性的好处
增加了程序的灵活性
使用者都是用同一种形式去调用
增加了程序的可扩展性
通过继承创建新类,使用者无需更改自己的代码
鸭子类型
没有直接的继承关系,有相同方法就可以调用
封装
封装的定义
从字面上就是隐藏,实际封装不是单纯的意义的隐藏
在类的定义阶段__name就会执行代码,识别__name的就会改成classname__name形成封装
注意
没有真正意义上限制我们从外部直接访问属性,知道了类名和属性名就可以拼出名字:类名__属性名,然后就可以访问了,如a._A__N
变形的过程只在类的定义时发生过一次,在定义的后的赋值操作,不会变形,要隐藏就放在类里面!别等人家都生成了你再想隐藏
在继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义为私有的
封装的意义
将数据隐藏起来这不是目的。隐藏起来然后对外提供操作该数据的接口,然后我们可以在接口附加上对该数据操作的限制,以此完成对数据属性操作的严格控制
目的是隔离复杂度
封装的扩展性
使用者的方法没有变,需求只需要变自己类的方法里的函数属性就可以了
组合
当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好
抽象类
import abc
metaclass=abc.ABCMeta
@abc.abstractmethod
特点
抽象类本质还是类,指的是一组类的相似性,包括数据属性和函数属性,而接口只强调函数属性的相似性
抽象类是一个介于类和接口之间的一个概念,同时具备类和接口的部分特性
property
不用调用函数的方式,让使用者感觉这只是一个数据属性(实际还是函数属性),可以理解为函数的伪装
绑定方法与非绑定方法
绑定方法
绑定到对象的方法
类内部定义的def函数,没有绑定装饰器,就是给对象使用的函数,绑定给谁就给谁来调用
使用场景
为对象量身定制,自动将对象的第一个参数传入,不能自动传值
绑定到类的方法
在类的内部定义的,被装饰器classmethod修饰的方法
对象也是可以调用的,参数还是传的类
使用场景
为类量身定制,自动将类当做第一个参数传入
非绑定方法
不与类或者对象绑定
不与类或者对象绑定
被装饰器staticmethod修饰的方法
使用场景
在类中直接定义的函数,无论谁调用都不会自动传值
面向对象进阶
反射
反射的定义
通过字符串来映射到对象的属性
发射的关键字
1.hasattr(obj,str)
判断obj下到底有没有str的参数属性,本质上就是判断字典里有没有str的属性(obj.__dict__(str))>>返回的值是布尔值(True/False)(判断有没有)
2.getattr(obj,str,default)
直接显示str属性的结果,如果没有就报错,default就是直接赋值None(设置)
3.setattr(obj,'sex','male')
等同于obj.sex = male设置对象的值(修改和新增)
4.delattr(obj, 'age')
等同于del obj.age删除对象的值(删除)
内置方法
isinstance(obj,cls)
检查是否obj是否是类 cls 的对象
issubclass(sub, super)
检查sub类是否是 super 类的派生类
Item系列
Item系列应用
把对象模拟成python的字典类型的数据实现访问的格式,会把obj模拟成字典的形式
__getitem__(self, item)
查看属性
__setitem__(self, key, value)
设置属性
__delitem__(self, key)
删除属性
__str__
方法改变对象的字符串显示,会在打印对象的时候触发,把返回结果(必须是字符串)返回
__del__方法
如果在类的内部调用了__del__方法,这个方法就会绑定给对象,在对象被删除的时候会自动先触发,就会调用垃圾回收机制,即使你不调用,也会在删除对象的时候自动触发__del__方法
元类
元类的定义
所有用class定义的类,他们得元类就是type
定义类的三要素
1.类的类名
2.类的继承
python3中默认继承object
3.类必须要有自己的名称空间
数据属性
函数属性
自定义元类
控制类
继承type类
自定义__init__方法
super()调用父类
控制实例化对象
先造一个空对象(object.__new__(self))
初始化(self.__init__(obj,*args,**kwargs))
返回(return obj)
单例模式
默认参数一样的情况下,就不会生成新的内存空间了,用公用的就行(实际就是一种优化的策略)
0 条评论
下一页