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操作xml文件详细介绍
Jun 09 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
Feb 14 Python
python 读取excel文件生成sql文件实例详解
May 12 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
python实现在图片上画特定大小角度矩形框
Oct 24 Python
使用Python的toolz库开始函数式编程的方法
Nov 15 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
Jun 17 Python
django基于restframework的CBV封装详解
Aug 08 Python
500行代码使用python写个微信小游戏飞机大战游戏
Oct 16 Python
python爬虫爬取笔趣网小说网站过程图解
Nov 18 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
python调用有道智云API实现文件批量翻译
Oct 10 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中的观察者模式
2010/03/24 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
PDO::getAttribute讲解
2019/01/28 PHP
[转]JS宝典学习笔记
2007/02/07 Javascript
javascript 函数速查表
2010/02/07 Javascript
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
Openlayers实现测量功能
2020/09/25 Javascript
使用SAE部署Python运行环境的教程
2015/05/05 Python
Python实现大文件排序的方法
2015/07/10 Python
Python 专题四 文件基础知识
2017/03/20 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
在Python中定义一个常量的方法
2018/11/10 Python
Python读取VOC中的xml目标框实例
2020/03/10 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
2021/01/06 Python
函授毕业自我鉴定
2013/12/19 职场文书
自动化专业个人求职信范文
2013/12/30 职场文书
办理信用卡工作证明
2014/01/11 职场文书
《我的信念》教学反思
2014/02/15 职场文书
终止劳动合同协议书
2014/04/14 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python
win10搭建配置ftp服务器的方法
2022/08/05 Servers
JavaScript实现简单的音乐播放器
2022/08/14 Javascript