Python實現(xiàn)字典的點號取值的三種常用方式
在 Python 中實現(xiàn)字典的點號取值(dict.key 語法)可以通過自定義類實現(xiàn)。以下是三種常用實現(xiàn)方式,根據(jù)需求選擇合適方案:
方案1:簡單屬性訪問(推薦)
class DotDict(dict):
"""支持點號取值的字典類"""
__getattr__ = dict.get
__setattr__ = dict.__setitem__
__delattr__ = dict.__delitem__
# 使用示例
d = DotDict({"name": "Alice", "age": 30, "address": {"city": "Shanghai"}})
print(d.name) # 輸出: Alice
print(d.address.city) # 輸出: Shanghai
d.job = "Engineer" # 添加新屬性
print(d.job) # 輸出: Engineer
方案2:遞歸嵌套轉(zhuǎn)換(支持多層嵌套)
class DotDict(dict):
"""支持嵌套字典的點號訪問"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for key, value in self.items():
if isinstance(value, dict):
self[key] = DotDict(value)
def __getattr__(self, name):
try:
value = self[name]
if isinstance(value, dict) and not isinstance(value, DotDict):
return DotDict(value)
return value
except KeyError:
raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")
__setattr__ = dict.__setitem__
__delattr__ = dict.__delitem__
# 使用示例
data = {
"user": {
"name": "Bob",
"preferences": {
"theme": "dark",
"notifications": True
}
}
}
d = DotDict(data)
print(d.user.name) # 輸出: Bob
print(d.user.preferences.theme) # 輸出: dark
d.user.preferences.font_size = 14 # 添加嵌套屬性
方案3:只讀訪問(安全模式)
class ReadOnlyDotDict(dict):
"""只讀的點號訪問字典"""
def __getattr__(self, name):
if name in self:
value = self[name]
if isinstance(value, dict):
return ReadOnlyDotDict(value)
return value
raise AttributeError(f"No attribute '{name}'")
def __setattr__(self, name, value):
raise TypeError("'ReadOnlyDotDict' object is read-only")
# 使用示例
config = ReadOnlyDotDict({"api": {"url": " "timeout": 30}})
print(config.api.url) # 輸出:
config.api.port = 8080 # 拋出 TypeError
關(guān)鍵特性對比
| 特性 | 方案1 | 方案2 | 方案3 |
|---|---|---|---|
| 點號取值 | ? | ? | ? |
| 嵌套字典支持 | ? | ? | ? |
| 動態(tài)添加屬性 | ? | ? | ? |
| 修改現(xiàn)有值 | ? | ? | ? |
| 錯誤處理 | 簡單 | 完善 | 嚴(yán)格 |
| 適用場景 | 簡單配置 | 復(fù)雜數(shù)據(jù)結(jié)構(gòu) | 只讀配置 |
使用建議
- 簡單配置:選擇方案1,代碼簡潔高效
- 復(fù)雜JSON/嵌套數(shù)據(jù):選擇方案2,自動轉(zhuǎn)換嵌套字典
- 安全配置/常量:選擇方案3,防止意外修改
- 兼容性:所有方案保持字典原始方法(
keys(),values()等) - 錯誤處理:方案2/3提供明確的
AttributeError錯誤信息
# 實際應(yīng)用示例 - 加載配置文件
import json
from dot_dict import DotDict # 假設(shè)保存為 dot_dict.py
with open('config.json') as f:
config = DotDict(json.load(f))
# 點號訪問配置項
print(f"API端點: {config.api.base_url}")
print(f"超時設(shè)置: {config.api.timeout}s")
到此這篇關(guān)于Python實現(xiàn)字典的點號取值的三種常用方式的文章就介紹到這了,更多相關(guān)Python字典的點號取值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python urllib urlopen()對象方法/代理的補充說明
這篇文章主要介紹了python urllib urlopen()對象方法/代理的補充說明的相關(guān)資料,需要的朋友可以參考下2017-06-06
Python文件讀寫操作基礎(chǔ)知識和實戰(zhàn)應(yīng)用
本文系統(tǒng)講解了Python文件操作的基礎(chǔ)知識和實戰(zhàn)技巧,涵蓋文件打開關(guān)閉、讀寫方法、指針控制、二進制處理、異常處理及性能優(yōu)化策略,同時展望了異步IO、內(nèi)存映射增強等未來趨勢,需要的朋友可以參考下2025-06-06
Python基于文本內(nèi)容實現(xiàn)隱私信息提取與評估
這篇文章主要為大家介紹了Python如何實現(xiàn)基于文本內(nèi)容的用戶隱私泄露風(fēng)險評估系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-03-03
如何使用Python在excel中創(chuàng)建柱狀圖
這篇文章主要給大家介紹了關(guān)于如何使用Python在excel中創(chuàng)建柱狀圖的相關(guān)資料,包括導(dǎo)入模塊、新建工作簿、創(chuàng)建圖表、設(shè)置數(shù)據(jù)范圍、添加標(biāo)題和數(shù)據(jù)系列、以及保存圖表和工作簿,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04
python 獲取當(dāng)前目錄下的文件目錄和文件名實例代碼詳解
這篇文章主要介紹了python 獲取當(dāng)前目錄下的文件目錄和文件名實例代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03

