打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python对象转字典的两种方式

b

一. 方便但不完美的__dict__

对象转字典用到的方法为__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

使用dict的方式如下, 如果直接使用会报错.

a = A()dict(a)
  1. 使用dict之时, 将自动调用类中的keys方法, keys中定义了字典的键, 调用keys方法后, 程序将依照字典取值的方式尝试获得这些键对应的值.
  2. 当使用如字典的取值方式时: 比如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)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python黑魔法之描述符
深度剖析Python字典和集合(上)
python基础篇:python面向对象有哪些魔术方法?具体有什么用?
解析Python中的
扩展类实例的序列化和反序列化
盘点Python 面向对象编程最容易被忽视的知识点
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服