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群发邮件实例代码
Jan 03 Python
跟老齐学Python之编写类之一创建实例
Oct 11 Python
使用Python生成随机密码的示例分享
Feb 18 Python
Python reduce()函数的用法小结
Nov 15 Python
Python查找最长不包含重复字符的子字符串算法示例
Feb 13 Python
python3 property装饰器实现原理与用法示例
May 15 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
Jul 04 Python
Python matplotlib画曲线例题解析
Feb 07 Python
利用Python脚本批量生成SQL语句
Mar 04 Python
python 代码运行时间获取方式详解
Sep 18 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 Python
详解Django的MVT设计模式
Apr 29 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+ajax实现的点击浏览量加1
2015/04/16 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
json 实例详细说明教程
2009/10/31 Javascript
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
js打造数组转json函数
2015/01/14 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
JS实现回到页面顶部动画效果的简单实例
2016/05/24 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
环境工程专业个人求职信
2013/12/05 职场文书
公司财务总监岗位职责
2013/12/14 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
群众路线对照检查材料
2014/09/22 职场文书
授权委托书协议书
2014/10/16 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
会计求职自荐信范文
2015/03/04 职场文书
详解前端任务构建利器Gulp.js使用指南
2021/04/30 Javascript