python根據key獲取value值,python中key_python屬性和key的區別?

 2023-10-04 阅读 29 评论 0

摘要:super已經有人解釋了,就不畫蛇添足了。d['c'] = 100 d.c-------->不加__getattr__()會顯示訪問失敗 d['c']和d.c是有什么區別嗎 第一眼看上去感覺是JS開發者。。。d.c,訪問的是d的屬性,你也發現了,訪問的是__getattr__&#x

super已經有人解釋了,就不畫蛇添足了。d['c'] = 100

d.c-------->不加__getattr__()會顯示訪問失敗

d['c']和d.c是有什么區別嗎

第一眼看上去感覺是JS開發者。。。d.c,訪問的是d的屬性,你也發現了,訪問的是__getattr__,Python用一個字典維護著屬性。

d['c'],訪問的是__getitem__,通過這個方法訪問字典內部的數據結構。

python根據key獲取value值,對于d['c'],字典中的鍵是字符串'c',而d.c在Python語境中,認為c是d的一個屬性,而不是字典的鍵。

舉個例子:

>>> a = {(1, 2): 'ab'}

>>> a[(1, 2)]

'ab'

按照試圖用屬性訪問的話,難不成寫成a.(1,2)這樣的形式?這根本不是合法的Python語句。

python中數字字符和數字值有何不同。所以訪問字典中的鍵,還是用方括號吧。

補充:

其實,你要是真想這么做,完全不用自己寫__getattr__,只要這么做就行了。加不加super,就看自己需求了。

class Dict(dict):

def __init__(self, **kw):

self.__dict__ = self

python菜鳥教程,但強烈不建議這么做。Python的鍵和屬性訪問在語義上有明確的區別,最好還是分開使用。

再補充:

評論有朋友指出不要繼承dict,這是對的。但我想有人會問那應該繼承什么,答案是collections模塊中的MutableMapping這個ABC。(不過好像走題了。。)

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/112062.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息