首先我们创建一个类 Person并实例化 ```python class Person: name = 'erica' age = 20 def __init__(self): self.gender = 'female' # 实例化Person p = Person() ``` 打印 `__dict__` 属性 ```python print(p.__dict__) # 结果 {'gender': 'female'} ``` 我们可以看到,通过对象(实例)的`__dict__`属性只能拿到实例变量,不能拿到类变量 一般我们创建一个字典多数选择下面这种方式 ```python r = { 'name':'erica', 'age':20 } ``` 也可以通过在 dict()中直接传入键值对的方式创建,如下 ```python dict(name='erica', age=20) ``` 如果在 dict()直接传入对象能否将其序列化??? ```python dict(p) ``` 这种方式会去调用对象下面的一个特殊的方法**keys()**方法,key()方法必须返回一个**可迭代对象** (可以通过加入断点的方式进行验证) ```python class Person: name = 'erica' age = 20 def __init__(self): self.gender = 'female' def keys(self): return ('name', 'age', 'gender') # 必须返回可迭代对象 ``` 我们知道,对象生成字典,关键点就两个,一个是键,一个是值,调用keys()方法就是为了拿到键,至于可以有哪些键,完全由我们自己定义,这时,python就会遍历keys()返回的键,通过p['name']这种中括号的方式获取键所对应的值 但是对象不能直接通过中括号进行访问,需要增加`__getitem__()`方法,在`__getitem__()`方法中定义对应的返回值,代码如下: ```python class Person: name = 'erica' age = 20 def __init__(self): self.gender = 'female' def keys(self): return ('name', 'age', 'gender') # 必须返回可迭代对象 def __getitem__(self, item): return getattr(self, item) p = Person() print(1, p['name']) print(2, p['age']) print(3, p['gender']) print(4, dict(p)) import json print(5, json.dumps(dict(o))) # 结果 1 erica 2 20 3 female 4 {'name': 'erica', 'age': 20, 'gender': 'female'} 5 {"name": "erica", "age": 20, "gender": "female"} ``` 此时,这种方法就实现了对象转成字典的形式 **总结** ``` 使用dict(对象)这种方式将对象转成字典需要在 对象中定义keys() 和 __getitem__() 方法 ``` 最后修改:2019 年 02 月 19 日 01 : 40 PM © 著作权归作者所有