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回调函数用法实例分析
May 09 Python
基于ID3决策树算法的实现(Python版)
May 31 Python
使用Python写一个小游戏
Apr 02 Python
python 同时运行多个程序的实例
Jan 07 Python
浅谈Python反射 & 单例模式
Mar 21 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
Apr 15 Python
python多进程并行代码实例
Sep 30 Python
Python Serial串口基本操作(收发数据)
Nov 06 Python
python飞机大战游戏实例讲解
Dec 04 Python
python中Array和DataFrame相互转换的实例讲解
Feb 03 Python
pycharm进入时每次都是insert模式的解决方式
Feb 05 Python
python字符串的多行输出的实例详解
Jun 08 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/12/14 PHP
php的ddos攻击解决方法
2015/01/08 PHP
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
javascript读取xml实现javascript分页
2013/12/13 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
Bootstrap布局组件应用实例讲解
2016/02/17 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
解决layui弹出层layer的area过大被遮挡的问题
2019/09/21 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
python入门教程之识别验证码
2017/03/04 Python
python类的继承实例详解
2017/03/30 Python
Python内置模块turtle绘图详解
2017/12/09 Python
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
使用python turtle画高达
2020/01/19 Python
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
实习销售业务员自我鉴定
2013/09/21 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
新闻稿格式范文
2015/07/18 职场文书
运动会通讯稿200字
2015/07/20 职场文书
CSS实现章节添加自增序号的方法
2021/06/23 HTML / CSS