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中的类学习笔记
Sep 23 Python
python继承和抽象类的实现方法
Jan 14 Python
Python中操作MySQL入门实例
Feb 08 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
Python IDE PyCharm的基本快捷键和配置简介
Nov 04 Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
Nov 22 Python
Python实现基本数据结构中队列的操作方法示例
Dec 04 Python
Python网络编程使用select实现socket全双工异步通信功能示例
Apr 09 Python
使用Python微信库itchat获得好友和群组已撤回的消息
Jun 24 Python
在ipython notebook中使用argparse方式
Apr 20 Python
用OpenCV进行年龄和性别检测的实现示例
Jan 29 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优于Node.js的五大理由分享
2012/09/15 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
2019/06/12 PHP
JavaScript静态的动态
2006/09/18 Javascript
jQuery的三种$()
2009/12/30 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
AspNet中使用JQuery boxy插件的确认框
2015/05/20 Javascript
初识Javascript小结
2015/07/16 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
jQuery无刷新切换主题皮肤实例讲解
2015/10/21 Javascript
Bootstrap插件全集
2016/07/18 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
vue-cli监听组件加载完成的方法
2018/09/07 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
在Uni中使用Vue的EventBus总线机制操作
2020/07/31 Javascript
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
python对字典进行排序实例
2014/09/25 Python
python得到单词模式的示例
2018/10/15 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
python3常用的数据清洗方法(小结)
2019/10/31 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
HTML5中的websocket实现直播功能
2018/05/21 HTML / CSS
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
军校本科大学生自我评价
2014/01/14 职场文书
翻译学院毕业生自荐书
2014/02/02 职场文书
教师网络培训感言
2014/03/09 职场文书
书法大赛策划方案
2014/06/04 职场文书
委托书如何写
2014/08/30 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
宇宙与人观后感
2015/06/05 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python