python中 class 或对象属性转化成dict 、dict转换成对象

 一、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}

把类或类对象的属性(包括方法)转化为dict:

>>> 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

展开阅读全文

没有更多推荐了,返回首页