python中 class 或物件屬性轉化成dict 、dict轉換成物件
阿新 • • 發佈:2018-12-30
一、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))
或者
二、dict 轉化成objectdef 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
>>> 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