python对象转字典的两种实现方式示例
作者:weixin_42359464 时间:2023-12-06 15:47:05
本文实例讲述了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程序设计有所帮助。
来源:https://blog.csdn.net/weixin_42359464/article/details/80882549
标签:python,对象,字典
0
投稿
猜你喜欢
python opencv 简单阈值算法的实现
2023-04-04 04:23:03
python封装对象实现时间效果
2022-10-30 16:14:01
numpy中hstack vstack stack concatenate函数示例详解
2023-02-22 19:39:06
MySql 5.6.14 Win32位免安装解压缩版配置教程
2024-01-13 01:27:44
浅析使用JDBC操作MySQL需要添加Class.forName("com.mysql.jdbc.Driver")
2024-01-21 23:08:48
Python可视化分析全球火山分布
2022-01-17 05:32:10
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2024-04-30 10:21:38
如何基于Python Matplotlib实现网格动画
2023-07-31 04:17:37
Go语言集成开发环境IDE详细安装教程
2024-04-25 15:26:12
SQL Server 2008图文安装教程第1/2页
2024-01-12 18:54:21
javascript 正则表达式相关应介绍
2024-04-10 14:02:39
浅谈numpy 函数里面的axis参数的含义
2023-06-04 11:23:35
Python pandas如何向excel添加数据
2021-07-14 17:37:41
Python中字符串List按照长度排序
2023-11-28 21:43:02
详解Python中@staticmethod和@classmethod区别及使用示例代码
2023-06-03 12:17:20
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
2022-11-12 08:16:41
在Spring中用select last_insert_id()时遇到问题
2009-05-24 19:50:00
基于Python实现视频转字符画动漫小工具
2022-12-20 04:33:54
python 利用zmail库发送邮件
2023-02-25 11:06:03
Pycharm如何运行.py文件的方法步骤
2023-03-13 12:32:37