首页 > 编程语言 >python dict 和 object 相互转换

python dict 和 object 相互转换

时间:2023-08-10 17:45:35浏览次数:40  
标签:__ obj name author python self object dict

python dict 和 object 的相互转换

dict.py 借助 dict, isinstance 来实现对象与字典之间的相互转换

def as_dict(obj):
    if not hasattr(obj, "__dict__"):
        return obj
    result = {}
    for key, val in obj.__dict__.items():
        if key.startswith("_"):
            continue
        element = []
        if isinstance(val, list):
            for item in val:
                element.append(as_dict(item))
        else:
            element = as_dict(val)
        result[key] = element
    return result


def as_obj(d):
    if isinstance(d, list):
        d = [as_obj(x) for x in d]
    if not isinstance(d, dict):
        return d

    class C:
        pass

    obj = C()
    for k in d:
        obj.__dict__[k] = as_obj(d[k])
    return obj

test_dict.py

import dict


class Book:
    def __init__(self, name, price, author):
        self.name = name
        self.price = price
        self.author = author


class Author:
    def __init__(self, name, age):
        self.name = name
        self.age = age


def test_as_dict():
    book_dict = dict.as_dict(Book(name="Python crash course", price=29.50, author=Author(name="Phur", age=32)))
    assert book_dict["name"] == "Python crash course" and book_dict["author"]["age"] == 32


def test_as_obj():
    book = dict.as_obj({"name": "Python crash course", "price": 29.50, "author": {"name": "Phur", "age": 32}})
    assert book.name == "Python crash course" and book.author.age == 32

标签:__,obj,name,author,python,self,object,dict
From: https://www.cnblogs.com/goallin/p/17621057.html

相关文章

  • 使用Aspose.BarCode,在 Python 中扫描条码
    条形码是机器可读的数据表示形式,由平行线或几何图案直观地表示。它们提供了一种快速准确的方法来存储和检索信息,例如产品详细信息、库存代码或跟踪号码。条形码有多种类型,包括UPC、EAN、QR码等。每种类型都有特定的结构和编码机制。在这篇博文中,我们将学习如何构建高性能的Python......
  • Python列表排序sort和sorted的区别
    lst_1=[3,1,2]lst_2=[4,6,5]print(lst_1.sort())lst_1.sort()print(lst_1)print(sorted(lst_2))#None#[1,2,3]#[4,5,6]所以结论就是:sorted(list)原来的list不变,生成一个新的排好序的list对象。list.sort()改变原有的list,不会返回对象。......
  • 在 Python 中使用 Pygal 绘制世界地图
    在Python的Pygal库的帮助下,我们可以在Python中创建令人惊叹的世界地图,因为它提供了不同的功能来创建和自定义图形。本文探讨了绘制世界地图、自定义地图样式、添加数据以突出显示国家或地区以及将地图呈现为SVG文件的分步过程。无论您是想可视化地理数据、展示国际统计数据......
  • 在Python中使用LooseVersion进行软件版本号比对
    技术背景Python是一门极其热门、极其灵活的开发语言,其更新迭代的速度也非常的快速。有时候我们遇到不同的软件版本不同方法处理的情况,此时就需要用到版本号比对的工具。举一个例子说,我们要在python代码中区分numpy版本在1.21.6之前和之后的版本。虽然我们可以自己手写一个软件版......
  • python与selenium
    seleniumIDE脚本语言记录(录制) 屏幕操作(回放)seleniumRC自动化脚本selenium GRID分布式定位页面元素八种方式定位表格定位某个单元格 定位表格的子元素定位网页:静态网页动态网页......
  • RedHat:安装Python3.7
    学习自:rhel安装python3.7_redhat安装python3_weixin_44282127的博客-CSDN博客1、准备工作以下过程需要以用户角度开展:su-用户1)创建存放安装包的文件夹mkdir/opt/python2)去Python官网下载所需的python版本(这里以3.7.16为例)①选择Linux ②找到对应版本的python......
  • 盘点一个列表相加的Python基础题目
    大家好,我是皮皮。一、前言前几天在明佬的Python群【dq】问了一个Python列表基础处理的问题,一起来看看吧。下图是他的原始列表,想通过左边的列表,得到右边的合并列表。二、实现过程这里【流水线】和【hclw】大佬给了一个答案,如下图所示:如此顺利地解决了粉丝的问题。后来他自......
  • 用于地理空间数据分析的 5 个 Python 包
    推荐:使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景介绍地理空间数据分析在城市规划、环境研究、农业和运输行业中至关重要。不断增长的需求导致越来越多地使用Python包来满足各种地理数据分析要求,例如分析气候模式,调查城市发展或跟踪疾病传播等。评估和选择具有快速处理、......
  • # yyds干货盘点 # 盘点一个列表相加的Python基础题目
    大家好,我是皮皮。一、前言前几天在明佬的Python群【dq】问了一个Python列表基础处理的问题,一起来看看吧。下图是他的原始列表,想通过左边的列表,得到右边的合并列表。二、实现过程这里【流水线】和【hclw】大佬给了一个答案,如下图所示:如此顺利地解决了粉丝的问题。后来他自己也写了个......
  • python读取xml文件
    Python有三种方法解析XML:SAX,DOM,以及ElementTree,本博客主要是讲解DOM和ElementTreeDOM解析方法:xml文件解析首先将xml文件加载进内存,然后读取文件中的内容.在内存将文件以树的结构进行保存,树根在上,树枝在下,整个xml文件被封装为Document对象,文件中的标签节点被封装为No......