python对象转字典的两种实现方式示例


Posted in Python onNovember 07, 2019

本文实例讲述了python对象转字典的两种实现方式。分享给大家供大家参考,具体如下:

一. 方便但不完美的__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)

使用dict之时, 将自动调用类中的keys方法, keys中定义了字典的键, 调用keys方法后, 程序将依照字典取值的方式尝试获得这些键对应的值.

当使用如字典的取值方式时: 比如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)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
Dec 08 Python
Python随机读取文件实现实例
May 25 Python
基于Python __dict__与dir()的区别详解
Oct 30 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
Jan 06 Python
Python操作Redis之设置key的过期时间实例代码
Jan 25 Python
使用python爬虫获取黄金价格的核心代码
Jun 13 Python
Python批量生成特定尺寸图片及图画任意文字的实例
Jan 30 Python
Python实现密码薄文件读写操作
Dec 16 Python
用Python生成HTML表格的方法示例
Mar 06 Python
为什么称python为胶水语言
Jun 16 Python
keras topN显示,自编写代码案例
Jul 03 Python
python中翻译功能translate模块实现方法
Dec 17 Python
python多线程高级锁condition简单用法示例
Nov 07 #Python
python文件操作的简单方法总结
Nov 07 #Python
详解Django admin高级用法
Nov 06 #Python
Python全局锁中如何合理运用多线程(多进程)
Nov 06 #Python
Python实现socket非阻塞通讯功能示例
Nov 06 #Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 #Python
详解Python list和numpy array的存储和读取方法
Nov 06 #Python
You might like
PHP nl2br函数 将换行字符转成 <br>
2009/08/21 PHP
php命令行用法入门实例教程
2014/10/27 PHP
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
jquery延迟加载外部js实现代码
2013/01/11 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
Jquery实现动态切换图片的方法
2015/05/18 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
js实现新浪微博首页效果
2015/10/16 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
微信小程序引用公共js里的方法的实例详解
2017/08/17 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
js时间转换毫秒的实例代码
2019/08/21 Javascript
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
跟老齐学Python之集成开发环境(IDE)
2014/09/12 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
python删除文本中行数标签的方法
2018/05/31 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
市场部专员岗位职责
2013/11/30 职场文书
房屋出租协议书
2014/04/10 职场文书
应届生求职自荐信
2014/07/04 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
护士求职自荐信范文
2015/03/04 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
初中毕业感言300字
2015/07/31 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
spring boot中nativeQuery的用法
2021/07/26 Java/Android
Oracle 死锁的检测查询及处理
2021/09/25 Oracle