python中 class 或對象屬性轉化成dict 、dict轉換成對象

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.