def obj2dict( obj):
def is_basic_value( obj):
# 定义基本类型集合
basic_types = (int, float, str, bool, type(None))
# 检查对象类型是否在基本类型集合中
return isinstance(obj, basic_types)
if is_basic_value(obj):
return obj
if isinstance(obj, tuple):
return [obj2dict(v) for v in obj]
if isinstance(obj, list):
return [obj2dict(v) for v in obj]
if isinstance(obj, dict):
return {k: obj2dict(v) for k, v in obj.items()}
elif hasattr(obj, "__dict__"):
return {k: obj2dict(v) for k, v in obj.__dict__.items() if not k.startswith('_')} # =过滤掉私有属性
else:
raise TypeError("Unserializable object: {}".format(obj))
if __name__ == "__main__":
class A():
def __init__(self):
self.name = 1
self.children = []
self.children_dic = {1: 'a', 2: 'b'}
def __str__(self):
return 'A'
def sd(self):
return 'A'
def todict(self):
return 'A'
a1 = A()
a2 = A()
a2.name=2
a3 = A()
a3.name=3
# a3.children=[a1,a2]
a3.children_dic = {1: a1, 2: a2}
a3.children=[a1,a2]
a=obj2dict(a3)
print(a)