像物件屬性一樣存取字典鍵
最初為了更方便地存取字典鍵,您設計了帶有自訂 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
此方法提供了幾個優點:
然而,它也有潛力缺點:
以上是在 Python 中將字典鍵作為物件屬性存取是一種安全且有效率的做法嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!