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实现根据主机名字获得所有ip地址的方法
Jun 28 Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 Python
python实现list元素按关键字相加减的方法示例
Jun 09 Python
python在非root权限下的安装方法
Jan 23 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
Dec 20 Python
python 判断三个数字中的最大值实例代码
Jul 24 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
tensorflow pb to tflite 精度下降详解
May 25 Python
浅谈keras 模型用于预测时的注意事项
Jun 27 Python
使用keras实现非线性回归(两种加激活函数的方式)
Jul 05 Python
Windows 平台做 Python 开发的最佳组合(推荐)
Jul 27 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生成excel时单元格内换行问题的解决方法
2010/08/26 PHP
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
用js判断输入是否为中文的函数
2014/03/10 Javascript
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
使用node.js中的Buffer类处理二进制数据的方法
2016/11/26 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
js实现股票实时刷新数据案例
2017/05/14 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
Python3实现生成随机密码的方法
2014/08/23 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
python队列queue模块详解
2018/04/27 Python
在python中pandas的series合并方法
2018/11/12 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
python中元组的用法整理
2020/06/15 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
戴森英国官网:Dyson英国
2019/05/07 全球购物
市场开发与营销专业求职信
2013/12/31 职场文书
期末考试动员演讲稿
2014/01/10 职场文书
趣味运动会策划方案
2014/06/02 职场文书
2015年助残日活动总结
2015/03/27 职场文书
竞聘书的秘诀
2019/04/02 职场文书
redis哨兵常用命令和监控示例详解
2021/05/27 Redis