python dict 和 object 相互转换
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器