python中將字典改造為對象的方法
python中將字典改造為對象
在實(shí)際項(xiàng)目中,當(dāng)使用json模塊加載一個(gè)深度很深的字典類型的json文件時(shí),使用字典的訪問方式,將會出現(xiàn)很多中括號,即不直觀也不美觀,可以將這個(gè)字典轉(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 詳解。
當(dāng)一個(gè)對象通過’.'來訪問一個(gè)屬性時(shí),如果報(bào)錯(cuò),將會轉(zhuǎn)到__getattr__做進(jìn)一步處理,此時(shí)就可以將該key對應(yīng)的value返回,當(dāng)然如果value仍然是一個(gè)字典,則需要將它繼續(xù)轉(zhuǎn)化為一個(gè)Dict2Obj對象。
當(dāng)訪問不存在的key時(shí),和字典一樣,會彈出異常,為了避免這種情況發(fā)生,類似字典,可以使用get()訪問。
到此這篇關(guān)于python中將字典改造為對象的方法的文章就介紹到這了,更多相關(guān)python字典改造為對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中的TCP(傳輸控制協(xié)議)用法實(shí)例分析
這篇文章主要介紹了python中的TCP(傳輸控制協(xié)議)用法,結(jié)合完整實(shí)例形式分析了Python基于TCP協(xié)議的服務(wù)器端與客戶端相關(guān)實(shí)現(xiàn)技巧及操作注意事項(xiàng),需要的朋友可以參考下2019-11-11Django 拼接兩個(gè)queryset 或是兩個(gè)不可以相加的對象實(shí)例
這篇文章主要介紹了Django 拼接兩個(gè)queryset 或是兩個(gè)不可以相加的對象實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03關(guān)于文件Permission denied解決方案(pip)
這篇文章主要介紹了文件Permission denied解決方案(pip),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Python異常處理:try、except、else、finally的全面解析
在Python中,異常是程序在運(yùn)行時(shí)發(fā)生的錯(cuò)誤,當(dāng)Python解釋器遇到一個(gè)它不能處理的錯(cuò)誤時(shí),它會拋出一個(gè)異常,異常處理的主要目的是在程序遇到錯(cuò)誤時(shí),提供一種方法來處理這些錯(cuò)誤,而不是簡單地讓程序崩潰,本文介紹了Python異常處理:try、except、else、finally的全面解析2024-07-07django使用圖片延時(shí)加載引起后臺404錯(cuò)誤
本文給大家介紹的是作者在Django中使用圖片的延時(shí)加載技術(shù)后引起后臺404錯(cuò)誤的問題以及解決思路和方法,有需要的小伙伴可以參考下2017-04-04