复习:
#反射 必须会,必须能看的懂,必须知道在哪儿用
#hasattr getattr setattr delattr
内置方法 必须能看懂 能用尽量用
__len__len(obj)的结果依赖于obj.__len()__的结果,计算对象的长度
__hash__ hash(obj)的结果依赖于obj.__hash__()的结果,结算对象的hash值
__eq__ obj1 == obj2 的结果依赖于obj.__eq__()的结果,用来判断相等
__str__ str(obj) print(obj) '%s'%obj 的结果依赖于__str__,用来做输出、显示
__repr__ repr(obj) '%r'%obj的结果依赖于__repr__,还可以做str的备胎
__format__ format() 的结果依赖于__format__的结果,是对象格式化的
__call__ obj() 相当于调用 __call__, 实现了__call__的对象是callable 的
__new__ 构造方法,在执行__init__之前执行,负责创建一个对象,在单例模式中有具体的应用
__del__ 析构方法,在对象删除的时候,删除这个对象之前执行,主要用来关闭在对象中打开的系统资源
class A: def __getitem__(self, item): print(item) a = A()
__getitem__ 对象[]的新式对对象进行增删改查
__setitem__
__delitem__
__delattr__ del obj.attr 用来自定义删除一个属性的方法
只有一个对象,只开了一个内存空间
创建一个类 单例模式中的对象属性编程类中的静态属性,所有的方法变成类方法
设计模式---java
python中的单例模式 是使用__new__
python
显示一个对象中的所有a开头的属性
二,模块
py文件就是模块
python之所以好用,模块多
三种
1.内置模块
python安装的时候自带的
2.扩展模块
例如:
itchat
beautiful soap
selenium 网页自动化测试工具
django tornado
3.自定义模块
内置模块
序列化模块
hashlib 模块
序列化模块
能存储在文件中的一定是字符串,或者是字节
能在网络上传输的 只有字节
dic = {"层数":(90,23)} print(str(dic)) print(str(dic).encode(encoding='utf-8'))
##注意上面中文才会显示下方 xe5........
dic = {"层数":(90,23)} print(str(dic)) print(str(dic).encode(encoding='utf-8')) b"{'xe5xb1x82xe6x95xb0': (90, 23)}" s = b"{'xe5xb1x82xe6x95xb0': (90, 23)}" res = s.decode(encoding='utf-8') print(res)
# dic --> 字符串 序列化
#字符串 --> dic 反序列化
#序列化 == 创造一个序列 ==》创造一个字符串
#实例化 == 创造一个实例
import json #序列化 dic = {"john":(190,90)} ret = json.dumps(dic,ensure_ascii=False) print(type(dic),dic) print(type(ret),ret) print('*',str(dic)) #土办法 #反序列化 res = json.loads(ret) print(type(res),res)
执行输出:
f = open('john','r',encoding='utf-8') ret = json.load(f) print(type(ret),ret)
执行输出
dump 序列化 load反序列化 主要用于一个数据直接存在文件里直接和文件打交道
dumps序列化 loads反序列化 只在内存中操作数据 主要用于网络传输和多个数据与文件打交道
import pickle