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使用Socket(Https)Post登录百度的实现代码
May 18 Python
python调用windows api锁定计算机示例
Apr 17 Python
Python程序设计入门(2)变量类型简介
Jun 16 Python
基于python元祖与字典与集合的粗浅认识
Aug 23 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
python selenium循环登陆网站的实现
Nov 04 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
python中adb有什么功能
Jun 07 Python
推荐值得学习的12款python-web开发框架
Aug 10 Python
Python爬取数据并实现可视化代码解析
Aug 12 Python
Python中常见的反爬机制及其破解方法总结
Jun 10 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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之生成GIF动画的实现方法
2013/06/07 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
再谈javascript原型继承
2014/11/10 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
js限制input标签中只能输入中文
2015/06/26 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
深入理解vue-loader如何使用
2017/06/06 Javascript
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
[02:48]DOTA2英雄基础教程 暗夜魔王
2013/12/12 DOTA
go语言计算两个时间的时间差方法
2015/03/13 Python
Django与遗留的数据库整合的方法指南
2015/07/24 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
Django 自动生成api接口文档教程
2019/11/19 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
农业开发项目建议书
2014/05/16 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
刘胡兰观后感
2015/06/16 职场文书
班级联欢会主持词
2015/07/03 职场文书
给校长的建议书范文
2015/09/14 职场文书
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis