一、class 或对象 属相转化成dict ,
class 和类对象的属性有所区别,有兴趣的可以输出类和对象的 __dict__ 查看一下,
>>> class A(object):
... def __init__(self):
... self.b = 1
... self.c = 2
... def do_nothing(self):
... pass
...
>>> a = A()
>>> a.__dict__
{'c': 2, 'b': 1}
>>> class Foo(object):
... bar = 'hello'
... baz = 'world'
...
>>> f = Foo()
>>> [name for name in dir(f) if not name.startswith('__')]
[ 'bar', 'baz' ]
>>> dict((name, getattr(f, name)) for name in dir(f) if not name.startswith('__'))
{ 'bar': 'hello', 'baz': 'world' }
可以改进上述方法,只返回数据属性,不包括方法:
dict((name, getattr(f, name)) for name in dir(f)
if not name.startswith('__') and not callable(value))
def props(obj):
pr = {}
for name in dir(obj):
value = getattr(obj, name)
if not.name.startswith('__') and not callable(value):
pr[name] = value
return pr
二、dict 转化成object
>>> d
{'a': 1, 'b': {'c': 2}, 'd': ['hi', {'foo': 'bar'}]}
>>> def obj_dic(d):
top = type('new', (object,), d)
seqs = tuple, list, set, frozenset
for i, j in d.items():
if isinstance(j, dict):
setattr(top, i, obj_dic(j))
elif isinstance(j, seqs):
setattr(top, i,
type(j)(obj_dic(sj) if isinstance(sj, dict) else sj for sj in j))
else:
setattr(top, i, j)
return top
>>> x = obj_dic(d)
>>> x.a
1
>>> x.b.c
2
>>> x.d[1].foo
'bar'
http://stackoverflow.com/questions/1305532/convert-python-dict-to-object
http://stackoverflow.com/questions/61517/python-dictionary-from-an-objects-fields