有人可以解释什么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