首頁 >後端開發 >Python教學 >在 Python 中將字典鍵作為物件屬性存取是一種安全且有效率的做法嗎?

在 Python 中將字典鍵作為物件屬性存取是一種安全且有效率的做法嗎?

Linda Hamilton
Linda Hamilton原創
2024-12-18 03:40:14222瀏覽

Is Accessing Dictionary Keys as Object Attributes in Python a Safe and Efficient Practice?

像物件屬性一樣存取字典鍵

最初為了更方便地存取字典鍵,您設計了帶有自訂 getattr 的AttributeDict 類別setattr 方法。然而,這種方法引起了對其固有限制和潛在陷阱的擔憂。

Python 缺乏這種開箱即用的功能,這表明了潛在的​​警告。一個顯著的缺點是儲存的鍵和內建字典方法屬性之間可能存在命名空間衝突。這可能會導致意外行為,如下例所示:

d = AttrDict()
d.update({'items':['jacket', 'necktie', 'trousers']})
for k, v in d.items():    # TypeError: 'list' object is not callable
    print "Never reached!"

此處,傳入資料用清單覆蓋 .items() 字典方法,從而導致意外錯誤。

得到類似結果的更有效方法是將 dict() 的子類別分配給類別中的內部 dict 屬性。這保留了原始字典的功能,同時啟用對其鍵的屬性存取:

class AttrDict(dict):
    def __init__(self, *args, **kwargs):
        super(AttrDict, self).__init__(*args, **kwargs)
        self.__dict__ = self

此方法提供了幾個優點:

  • 透過物件屬性(例如obj. foo)進行無縫鍵存取)
  • 保留字典類別方法(例如, .keys())
  • 屬性和項目之間的同步
  • 正確處理不存在的鍵(引發AttributeError)
  • Tab 自動補全支援

然而,它也有潛力缺點:

  • 某些Python版本中可能存在記憶體洩漏
  • 有關屬性分配的 Pylint 警告
  • 由於其意外行為而可能造成混亂

以上是在 Python 中將字典鍵作為物件屬性存取是一種安全且有效率的做法嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn