python对象转字典的两种实现方式示例

 更新时间:2019年11月07日 09:03:05   作者:weixin_42359464  
这篇文章主要介绍了python对象转字典的两种实现方式,结合实例形式分析了Python字典与对象数据类型转换相关操作技巧,需要的朋友可以参考下

本文实例讲述了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列表(list)操作技巧总结》、《Python函数使用技巧总结》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • 分享Pytorch获取中间层输出的3种方法

    分享Pytorch获取中间层输出的3种方法

    这篇文章主要给大家分享了Pytorch获取中间层输出的3种方法,文章内容介绍详细,需要的小伙伴可以参考一下,希望对你的学习或工作有所帮助
    2022-03-03
  • Python 面向对象编程的三大特性之继承

    Python 面向对象编程的三大特性之继承

    继承也是面向对象编程三大特性之一,本篇文章我们就来学习Python中继承的用处、使用场景及用与不用的区别,感兴趣的朋友一起来阅读下面文章吧
    2021-09-09
  • termux中matplotlib无法显示中文问题的解决方法

    termux中matplotlib无法显示中文问题的解决方法

    这篇文章主要介绍了termux中matplotlib无法显示中文问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Python输入圆半径,计算圆周长和面积的实现方式

    Python输入圆半径,计算圆周长和面积的实现方式

    这篇文章主要介绍了Python输入圆半径,计算圆周长和面积的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Python如何删除print()中的空格

    Python如何删除print()中的空格

    这篇文章主要介绍了Python如何删除print()中的空格问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • NVIDIA安装CUDA的实现(图文教程)

    NVIDIA安装CUDA的实现(图文教程)

    本文主要介绍了NVIDIA安装CUDA的实现,包括系统要求、软件下载、安装步骤以及常见问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 在PyCharm中高效使用远程文件编辑功能的实现

    在PyCharm中高效使用远程文件编辑功能的实现

    PyCharm作为业界领先的集成开发环境(IDE),提供了强大的本地和远程开发功能,本文详细介绍了如何在PyCharm中使用远程文件编辑功能,希望能够帮助你提高远程开发的效率和体验
    2024-08-08
  • Python实现文件压缩和解压的示例代码

    Python实现文件压缩和解压的示例代码

    这篇文章主要介绍了Python实现文件压缩和解压的方法,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-08-08
  • Python 变量命名规则和定义变量详解

    Python 变量命名规则和定义变量详解

    这篇文章主要为大家介绍了Python 变量命名规则和定义变量,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • python实现简易内存监控

    python实现简易内存监控

    这篇文章主要介绍了python实现简易内存监控,每隔3秒获取系统内存,当内存超过设定的警报值时,获取所有进程占用内存并发出警报声,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06

最新评论