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内置数据类型详解
Aug 18 Python
Python实现简单的可逆加密程序实例
Mar 05 Python
python实现网站的模拟登录
Jan 04 Python
使用Python判断质数(素数)的简单方法讲解
May 05 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
python监控进程脚本
Apr 12 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
python使用bs4爬取boss直聘静态页面
Oct 10 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 Python
Python集合的基础操作
Nov 01 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数组
2006/10/09 PHP
PHP MSSQL 存储过程的方法
2008/12/24 PHP
PHP获取文件后缀名的三个函数
2012/10/15 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
浅谈React中组件间抽象
2018/01/27 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
Python群发邮件实例代码
2014/01/03 Python
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
python执行等待程序直到第二天零点的方法
2015/04/23 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
python实现画图工具
2020/08/27 Python
python遍历路径破解表单的示例
2020/11/21 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
do you have any Best Practice for testing
2016/06/04 面试题
医务工作者先进事迹材料
2014/01/26 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
试用期自我评价范文
2015/03/10 职场文书
幼师求职自荐信
2015/03/26 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技