六角括号在word里怎么打 小括号怎么打( 三 )
python3中只有新式类,默认式新式类,不必显式继承object 。
新式类增加了slots内置属性, 可以把实例属性的种类锁定到slots规定的范围之中 。
如果类是经典类,在多继承的情况下,会按照深度优先方式查找;如果类是新式类,在多继承的情况下,会按照广度优先方式查找;
1.11.python序列化
什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化 。
json是可以在不同语言之间交换数据的,而pickle只在python之间使用 。json只能序列化最基本的数据类型,而pickle可以序列化所有的数据类型,包括类,函数都可以序列化 。
序列化的目的:
以某种存储形式使自定义对象持久化 。将对象从一个地方传递到另一个地方 。使程序更具维护性 。
1.11.1 Json序列化
用于字符串 和 python数据类型间进行转换
Python
JSON
dict
object
list, tuple
array
str, unicode
string
int, long, float
number
True
true
False
false
None
null
JSON
Python
object
dict
array
list
string
unicode
number (int)
int, long
number (real)
float
true
True
false
False
null
None
-----------------------------loads和dumps---------------------------import jsondic = {'k1':'v1','k2':'v2','k3':'v3'}str_dic = json.dumps(dic)#序列化:将一个字典转换成一个字符串print(type(str_dic),str_dic)#<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}#注意,json转换完的字符串类型的字典中的字符串是由""表示的dic2 = json.loads(str_dic)#反序列化:将一个字符串格式的字典转换成一个字典#注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示print(type(dic2),dic2)#<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}list_dic = <1,<'a','b','c'>,3,{'k1':'v1','k2':'v2'}>str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型 print(type(str_dic),str_dic) #<class 'str'> <1, <"a", "b", "c">, 3, {"k1": "v1", "k2": "v2"}>list_dic2 = json.loads(str_dic)print(type(list_dic2),list_dic2) #<class 'list'> <1, <'a', 'b', 'c'>, 3, {'k1': 'v1', 'k2': 'v2'}>-------------------------load和dump----------------------------import jsonf = open('json_file','w')dic = {'k1':'v1','k2':'v2','k3':'v3'}json.dump(dic,f)#dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件f.close()f = open('json_file')dic2 = json.load(f)#load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回f.close()print(type(dic2),dic2
1.11.2 pickle序列化
用于python特有的类型 和 python的数据类型间进行转换 。pickle操作文件时,需要以二进制的方式操作 。
import pickledic = {'k1':'v1','k2':'v2','k3':'v3'}str_dic = pickle.dumps(dic)print(str_dic)#一串二进制内容dic2 = pickle.loads(str_dic)print(dic2)#字典import timestruct_time= time.localtime(1000000000)print(struct_time)f = open('pickle_file','wb')pickle.dump(struct_time,f)#f.write(pickle.dumps(struct_time))f.close()f = open('pickle_file','rb')struct_time2 = pickle.load(f)#struct_time2=pickle.loads(f.read())print(struct_time2.tm_year)
1.11.3 json序列化非基本数据类型
如果目标对象是基本数据类型,则不会执行转换方法
import jsonclass Info(object):def __init__(self,name,age):# super().__init__()self.name=nameself.age=ageinfo=Info("selfeasy",12)#由于json不支持将对象转为为序列化对象,所以需要做转换处理,实现default方法'''两种转换方式1. 实现default参数所指定的方法2. 继承JSONEncoder,并实现default方法'''# 1. 实现default方法, 当反序列化时,为了保持原来的目标对象,需要实现object_hook所指向的函数方法def makeJson(obj):return dict(name=obj.name,age=obj.age)def load_Json(obj):return Info(obj<'name'>, obj<'age'>)a=json.dumps(info, default=makeJson)print(a)print(json.loads(a,object_hook=load_Json))# 2.继承JSONEncoder,实现default方法class JsonMake(json.JSONEncoder):def default(self, o):if isinstance(o,Info):return dict(name=o.name,age=o.age)return super().default(o)a=json.dumps(info, cls=JsonMake)print(a)print(json.loads(a,object_hook=load_Json))
- 防晒喷雾喷在丝袜上有用吗
- etc余额不足让通行吗
- 明日方舟怎么在电脑上玩 明日方舟如何在电脑上玩
- 三国杀怎么改名字 三国杀改名字的方法
- emmm表情包什么意思
- 再会花开人难常在什么意思
- 中国有几大名山分别在哪里
- 泰勒科学管理思想中对人的研究仅仅存在于什么的范畴
- 野外迷路如何判断方向和求救
- 内衣80a和80b有什么区别
