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连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
编写Python脚本抓取网络小说来制作自己的阅读器
Aug 20 Python
python编程开发之textwrap文本样式处理技巧
Nov 13 Python
Python中.py文件打包成exe可执行文件详解
Mar 22 Python
django2 快速安装指南分享
Jan 05 Python
python 实现在Excel末尾增加新行
May 02 Python
浅谈Python traceback的优雅处理
Aug 31 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
Dec 19 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
Jun 27 Python
python文件和文件夹复制函数
Feb 07 Python
django为Form生成的label标签添加class方式
May 20 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 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中集成PayPal标准支付的实现方法分享
2012/02/06 PHP
万能的php分页类
2017/07/06 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
Javascript中的数学函数集合
2007/05/08 Javascript
javascript 支持ie和firefox杰奇翻页函数
2008/07/22 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
2014/03/20 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
详谈ES6中的迭代器(Iterator)和生成器(Generator)
2017/07/31 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
小程序使用wxs解决wxml保留2位小数问题
2019/12/13 Javascript
JS监听组合按键思路及实现过程
2020/04/17 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
python实现石头剪刀布小游戏
2021/01/20 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
python 用 xlwings 库 生成图表的操作方法
2019/12/22 Python
python 实现简单的FTP程序
2019/12/27 Python
安全资金保障制度
2014/01/23 职场文书
便利店投资创业计划书
2014/02/08 职场文书
大学生学期自我鉴定
2014/03/19 职场文书
个人担保书范文
2014/05/20 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
数学教师个人工作总结
2015/02/06 职场文书
2015年社区工作总结
2015/04/08 职场文书
MySQL添加索引特点及优化问题
2022/07/23 MySQL