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 Django模板的使用方法(图文)
Nov 04 Python
python爬虫教程之爬取百度贴吧并下载的示例
Mar 07 Python
Python函数可变参数定义及其参数传递方式实例详解
May 25 Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 Python
用Python进行简单图像识别(验证码)
Jan 19 Python
python自动查询12306余票并发送邮箱提醒脚本
May 21 Python
python二维码操作:对QRCode和MyQR入门详解
Jun 24 Python
Python字典对象实现原理详解
Jul 01 Python
python解释器spython使用及原理解析
Aug 24 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
Pytorch提取模型特征向量保存至csv的例子
Jan 03 Python
matplotlib 三维图表绘制方法简介
Sep 20 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检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
国外大牛IE版本检测!现在IE都到9了,IE检测代码
2012/01/04 Javascript
基于jquery & json的省市区联动代码
2012/06/26 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
如何编写jquery插件
2017/03/29 jQuery
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
vue跨域解决方法
2017/10/15 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
python生成验证码图片代码分享
2016/01/28 Python
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
用python实现对比两张图片的不同
2018/02/05 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
详解python datetime模块
2020/08/17 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
HTML5实现移动端弹幕动画效果
2019/08/01 HTML / CSS
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
离婚协议书范本样本
2014/08/19 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
七年级上册生物的课件
2019/08/07 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python
SQL中的三种去重方法小结
2021/11/01 SQL Server