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正则表达式匹配HTML页面编码
Apr 08 Python
Python实现定时任务
Feb 08 Python
python读取txt文件,去掉空格计算每行长度的方法
Dec 20 Python
python的schedule定时任务模块二次封装方法
Feb 19 Python
浅谈python之高阶函数和匿名函数
Mar 21 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
Python命令行click参数用法解析
Dec 19 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
Feb 25 Python
简单了解django处理跨域请求最佳解决方案
Mar 25 Python
用Python进行websocket接口测试
Oct 16 Python
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
May 14 Python
七个非常实用的Python工具包总结
Jun 15 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
如何分别全角和半角以避免乱码
2006/10/09 PHP
PHP图片库imagemagick安装方法
2014/09/23 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
PHP反射基础知识回顾
2020/09/10 PHP
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
JS canvas绘制五子棋的棋盘
2020/05/28 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
使用RxJS更优雅地进行定时请求详析
2019/06/02 Javascript
JavaScript常用内置对象用法分析
2019/07/09 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
使用SAE部署Python运行环境的教程
2015/05/05 Python
Python小程序 控制鼠标循环点击代码实例
2019/10/08 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
Python面向对象实现方法总结
2020/08/12 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
大学生自荐信
2013/12/11 职场文书
怎样写好自荐信和推荐信
2013/12/26 职场文书
员工培训心得体会
2013/12/30 职场文书
销售主管的自我评价分享
2014/01/03 职场文书
学术会议主持词
2014/03/17 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书