欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

【Python】实对象转成字典

时间:2023-05-24

把一个对象转换成一个json或是一个字典类型。

在使用时,定义的表对象需要把他们转换成字典类型,字典到json的格式转换就很方便了

在使用sqlalchemy、orm时,写一个工具类,只提取对象的字段属性,简单好用:

class UtillyModel(): @staticmethod def to_dict(myself):        #  myself  是一个对象 result = {} for a in myself.__dict__: # filter inner field by fieldname if a.startswith('_') or a == 'metadata': continue result[a] = getattr(myself, a) return result

class RoleModel(models.Model, UtillyModel): name = models.CharField(max_length=255, verbose_name='角色名称') description = models.CharField(max_length=255, verbose_name='角色描述')

如果想提取更深层的对象属性,可以使用  dir(myself) 函数、myself.__dir__() 等;

例:

def to_dict(dumyself):
    result = {}
    for a in dir(dumyself):
 
        # filter inner field by fieldname
        if a.startswith('_') or a == 'metadata':
            continue
 
        v = getattr(dumyself, a)
 
        # filter inner field by value type
        if callable(v):
            continue
 
        if type(v) not in (types.NoneType, types.IntType, types.LongType, types.StringType, types.UnicodeType):
            continue
 
        result[a] = getattr(dumyself, a)
 
    return result

dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。过滤掉_(下划线)开头的属性、方法,过滤掉metadata,过滤掉函数方法。使用getattr()获取对应的属性值,并写入到字典中,最终返回


对象转字典小结:

1.过滤属性名和属性类型,得到符合要求的字段

2.获取字段对应的值

3.按照格式填充值

 

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。