对象转字典用到的方法为__dict__. 比如对象对象a的属性a.name='wk', a.age=18
, 那么如果直接将使用a.__dict__
获得对应的字典的值为: {name: 'wk', aget:18}
, 很方便, 但是也存在一些限制. 其不完美之处在于:
比如:
class A(object): name = 'wukt' age = 18 def __init__(self): self.gender = 'male'a = A()print(a.__dict__)
此时的打印结果是: {gender: 'male'}
但是类变量name和age无法一同转换.
使用dict的方式如下, 如果直接使用会报错.
a = A()dict(a)
a['name']
, 将会调用类中的__getitem__
方法, __getitem__
方法决定了这个值是多少. 因此只需要在一例中添加两个方法就可以使对象可以通过dict转字典:
def keys(self): return ('name', 'age' )def __getitem__(self, item): return getattr(self, item)
通过这种方式, 既可以支持类变量的转换, 又可以自定义需要转换的字段.
完整代码:
class A(object): name = 'wukt' age = 18 def __init__(self): self.gender = 'male' def keys(self): '''当对实例化对象使用dict(obj)的时候, 会调用这个方法,这里定义了字典的键, 其对应的值将以obj['name']的形式取, 但是对象是不可以以这种方式取值的, 为了支持这种取值, 可以为类增加一个方法''' return ('name', 'age', 'gender') def __getitem__(self, item): '''内置方法, 当使用obj['name']的形式的时候, 将调用这个方法, 这里返回的结果就是值''' return getattr(self, item)a = A()r = dict(a)print(r)
联系客服