一、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.a1>>> x.b.c2>>> 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