python对象转字典的两种实现方式示例
作者:weixin_42359464 发布时间:2023-12-06 15:47:05
标签: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程序设计有所帮助。
来源:https://blog.csdn.net/weixin_42359464/article/details/80882549


猜你喜欢
- 先准备好安装软件。从官网下载最新的pycharm版本:https://www.jetbrains.com/pycharm/download/
- 本文实例讲述了Python3实现的回文数判断及罗马数字转整数算法。分享给大家供大家参考,具体如下:回文数判断一个整数是否是回文数。回文数是指
- 在用pymysql操作数据库的过程中,给sql语句传参碰到了很多问题,网上传参策略很多,这里推荐两种单个传参用%s,写起来比较简单:fiel
- function siblings(o){//参数o就是想取谁的兄弟节点,就把那个元素传进去 var a=[];//定义一个数组,用来存o的
- Cloudflare 有一项功能挺不错的,就是将页面上所有的邮箱地址都加密起来,防止机器人抓到然后干坏事。这项功能要在后台开启 email
- 随着网页制作热潮的兴起,Dreamweaver 4.0强大的功能深受众多网页制作者的喜爱。特别是Dreamweaver 4.0中有许多第三方
- python运行或调用另一个py文件或参数1. 运行另一个py文件(1)在file_A.py中运行file_B.py文件import oso
- 查看并打印matplotlib中所有的colormap(cmap)类型代码如下:方法一import matplotlib.pyplot as
- CSS重设就是由于各种浏览器解释CSS样式的初始值有所不同,导致设计师在没有定义某个CSS属性时,不同的浏览器会按照自己的默认值来为没有定义
- 我对定格动画非常喜爱,也曾经在大学毕业时期制作过一部个人定格动画MV.恰当给CDC博客写文之机,给大家介绍下定格动画,分享下这门独特的拍摄艺
- 之前一直傻傻分不清(n,1)和(n,)之间的区别,这里做一下总结,希望度过此文章的小伙伴都能明白。例如如果我们创建一个包含10个整型数的数组
- global.asa<SCRIPT LANGUAGE=VBScript RUNAT=Server>Sub&n
- 内置数据类型在编程中,数据类型是一个重要的概念。变量可以存储不同类型的数据,并且不同类型可以执行不同的操作。在这些类别中,Python 默认
- 一、数学函数ABS(x) 返回x的绝对值BIN(x) 返回x的二进制(OCT返回八进制,HE
- 前言这里给大家介绍一下利用Pycharm如何打包文件,并为文件设置图标。一、下载pyinstaller库1)点击win+r,输入cmd打开控
- 前言文接上回,我们已经使用gojs实现了一个最最最基本的树形布局。这次我们开始对图形的骨架进行一个内容展示上的丰富和显示风格上的美化。可以说
- 用在产品内容展示的页面上,给产品图片加上提示工具条,鼠标移动图片上即可看到效果,效果还是不错的:带黑白效果和放大图片效果(by misshj
- 首先找到要下载的歌曲排行榜的链接,这里用的是:https://music.163.com/discover/toplist?id=37786
- 1.前言有时候,我们需要把A库A1表某一部分或全部数据导出到B库B1表中,如果系统运维工程师没打通两个库链接,我们执行T-SQL是处理数据导
- 在Python2.x中表示八进制的方式有两种:以'0'开头和以'0o'(字母o)开头: Pyth