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