python中將字典改造為對象的方法
python中將字典改造為對象
在實際項目中,當使用json模塊加載一個深度很深的字典類型的json文件時,使用字典的訪問方式,將會出現(xiàn)很多中括號,即不直觀也不美觀,可以將這個字典轉(zhuǎn)化為對象,使得可以用.的方式訪問。
代碼如下:
class Dict2Obj(dict): def __getattr__(self, key): print('getattr is called') if key not in self: return None else: value = self[key] if isinstance(value,dict): value = Dict2Obj(value) return value dic = { 'zone':{ 'city':'shenzhen', 'location':'sx tech building' }, 'code':{ 'frontend':'vue', 'backend':'python' } } dic2obj = Dict2Obj(dic) print(dic2obj.zone.city)
輸出:
getattr is called
getattr is called
shenzhen
原理很簡單,就是重寫__getattr__方法,關(guān)于__getattr__的介紹,可以參考之前的文章python getattribute 、getattr、setattr 詳解。
當一個對象通過’.'來訪問一個屬性時,如果報錯,將會轉(zhuǎn)到__getattr__做進一步處理,此時就可以將該key對應(yīng)的value返回,當然如果value仍然是一個字典,則需要將它繼續(xù)轉(zhuǎn)化為一個Dict2Obj對象。
當訪問不存在的key時,和字典一樣,會彈出異常,為了避免這種情況發(fā)生,類似字典,可以使用get()訪問。
到此這篇關(guān)于python中將字典改造為對象的方法的文章就介紹到這了,更多相關(guān)python字典改造為對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中的TCP(傳輸控制協(xié)議)用法實例分析
這篇文章主要介紹了python中的TCP(傳輸控制協(xié)議)用法,結(jié)合完整實例形式分析了Python基于TCP協(xié)議的服務(wù)器端與客戶端相關(guān)實現(xiàn)技巧及操作注意事項,需要的朋友可以參考下2019-11-11Django 拼接兩個queryset 或是兩個不可以相加的對象實例
這篇文章主要介紹了Django 拼接兩個queryset 或是兩個不可以相加的對象實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03關(guān)于文件Permission denied解決方案(pip)
這篇文章主要介紹了文件Permission denied解決方案(pip),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08Python異常處理:try、except、else、finally的全面解析
在Python中,異常是程序在運行時發(fā)生的錯誤,當Python解釋器遇到一個它不能處理的錯誤時,它會拋出一個異常,異常處理的主要目的是在程序遇到錯誤時,提供一種方法來處理這些錯誤,而不是簡單地讓程序崩潰,本文介紹了Python異常處理:try、except、else、finally的全面解析2024-07-07