面向对象进阶
一、面向对象
1、封装
(1)广义上的封装:把变量和函数都放在类中
(2)狭义上的封装:把一些变量或者方法隐藏起来,不对外公开
公有的:
私有的:__名字:这个名字就变成私有的名字
私有的名字只能在类的内部使用不能在类的外部使用
如果非要在类的外部调用一个私有的名字,name必须是在私有的名字前边加_类名__私有的名字
不能使用上面这种方式去调用私有的变量
私有的变量:在类的内部如果使用__变量的形式会发生变形,python会自动的为你加上_类名
静态属性、对象属性、方法(动态属性)前面加上双下划线都会变成私有的
私有的特点就是只能在类的内部调用,不能在类的外部使用
(3)classmethod:
如果某一个类中的方法,并没有用到这个类的实例中的具体属性
只是用到了类中的静态变量就是使用类方法
二、模块
(一)序列化模块
1、数据类型转成字符串的过程就是序列化
2、什么时候用序列化
数据从内存到文件
数据在网络上传输
3、python中序列化的模块
json:通用支持的数据类型少,list tuple dict
dumps:字典转字符串的过程--序列化
loads:字符串转回其他数据类型--反序列化
dump:是和文件交互的
load:从文件中反序列化
pickle:python中通用的,支持几乎所有python中的数据类型
(1)支持更多的数据类型
(2)
shelve:python中使用的便捷序列化工具
(二)hashilib模块:摘要算法
包含了多种算法
将一个字符串进行摘要运算,拿到一个固定的值
import hashlib
hashlib.md5() #一种算法
能够让一个字符串唯一的对应一个固定的值
(2)校验文件一致性
(三)configparse模块
(四)logging模块
(1)简单配置
(2)logger对象的方式配置
logging.debug() 非常细节的日志--排查错误时使用
logging.info()正常的日志信息
logging.warning()警告
logging.error()错误日志信息
logging.crirical()严重错误
三、反射
(1)通过字符串数据类型的变量名来访问变量的值
类名 反射静态属性
对象名反射对象属性和方法
首先使用getattr获取一个名字,如果在这个对象的命名空间中没有这个名字会报错
getattr的反射好伴侣hasttr
如果使用getattr获取一个方法,那么只能拿到这个方法的内存地址
加上括号就是执行,当然括号里的参数可以照传不误
如果getattr获取一个属性,那么直接使用反射就可以获取到值
模块反射模块中的名字
反射自己所在文件中的名字
x.y这样的形式都可以用反射
四、面向对象进阶
__new__:构造方法,创建一个对象
__init__:初始化方法
先执行new方法,object.new()
再执行init
单例模式:某一个类只有一个实例
类中的内置方法很多都和内置函数相关