有人可以解釋什麼dict
類用於?這個片段是從深入Python什麼是dict類用於
class FileInfo(dict):
"store file metadata"
def __init__(self, filename=None):
self["name"] = filename
我明白key = value對與self['name'] = filename
分配但到底是什麼繼承dict
類與此有關?請幫助我理解。
有人可以解釋什麼dict
類用於?這個片段是從深入Python什麼是dict類用於
class FileInfo(dict):
"store file metadata"
def __init__(self, filename=None):
self["name"] = filename
我明白key = value對與self['name'] = filename
分配但到底是什麼繼承dict
類與此有關?請幫助我理解。
它用於創建自己的自定義字典類型。
您可以覆蓋__init__
,__getitem__
和__setitem__
方法爲您自己的特殊目的擴展字典的用法。
閱讀Dive into Python文本中的下一節:我們使用這種繼承來處理文件信息,就像我們使用普通字典一樣。
# From the example on the next section
>>> f = fileinfo.FileInfo("/music/_singles/kairo.mp3")
>>> f["name"]
'/music/_singles/kairo.mp3'
的fileinfo
類的設計,它在它的構造函數接收文件名的方式,然後讓用戶獲取文件信息,只是你從一個普通的字典中獲取值的方式。
這種類的另一個用法是創建控制其數據的字典。例如,你需要一個字典,當事物被分配時,它會做一件特殊的事情,或者從其「傳感器」鍵讀取。你可以定義特殊功能__setitem__
這與鍵名敏感:
或者比如你要返回一個特殊值,每次用戶讀取「溫度」鍵。爲此,您繼承了__getitem__
函數:
def __getitem__(self, key):
if key == "temperature":
return CurrentWeatherTemperature()
else:
return self.data[key]
當Python中的類繼承另一個類時,這意味着在繼承的類上定義的任何方法本質上都是在新創建的類上定義的。
所以當FileInfo
繼承dict
這意味着所有的dict
類的功能現在可以FileInfo
,除了任何FileInfo
可以通過重新定義方法或參數聲明,或更重要的是,重寫。
由於Python中的對象dict
允許鍵/值名稱對,因此這使得FileInfo
可以訪問相同的機制。
@ tkone - 是否繼承了鍵值對強制使用的'dict'對象?不是每個python對象都有這個能力嗎? – dopatraman 2012-01-03 17:59:52
不,這就是JavaScript :)。 Python對象具有可以通過「點」符號('test.parameter')訪問的屬性。 'dict'是一個關聯數組,您可以使用關聯的鍵訪問這些值。嘗試在Python中實例化一個對象,並像訪問數組'test ['parameter']'一樣訪問它。你會得到'TypeError:'Test'對象不是可代碼化的.'現在製作一個字典並嘗試通過'點'符號來訪問它。你會'AttributeError:'dict'對象沒有屬性N' – tkone 2012-01-03 20:03:48
@ KL-7 - 您是否介意提供從'dict'繼承的子類的不同示例?如何在實踐中使用這個? – dopatraman 2012-01-03 17:35:41
我不認爲人們經常創建'dict'或其他內置類型的子類,但是[here](http://www.voidspace.org.uk/python/odict.html)是有序字典的實現。正如你可以在[source](http://www.voidspace.org.uk/downloads/odict.py)中看到的那樣,OrderedDict類是'dict'類型的一個子類。 – 2012-01-03 18:37:53