有人可以解释dict
类的用途吗?此代码段来自 Dive Into Python
class FileInfo(dict):
"store file metadata"
def __init__(self, filename=None):
self["name"] = filename
我理解使用self['name'] = filename
分配key = value对但是继承dict
类与此有什么关系呢?请帮我理解。
答案 0 :(得分:3)
如果你不熟悉面向对象编程的继承概念,请至少看一下this wiki文章(不过,这只是为了介绍,可能不是最好的一篇)。
在python中,我们使用这种语法将类A
定义为类B
的子类:
class A(B):
pass # empty class
在您的示例中,由于FileInfo
类继承自标准dict
类型,因此您可以将该类的实例用作字典(因为它们具有常规dict
对象具有的所有方法)。除了允许您按键分配值的其他内容(dict
提供了处理此操作的方法):
self['name'] = filename
这是您想要的解释还是您不理解其他内容?
答案 1 :(得分:1)
当Python中的Class继承自另一个Class时,这意味着继承的Class上定义的任何方法本质上都是在新创建的Class上定义的。
因此当FileInfo
继承dict
时,dict
类的所有功能现在都可用于FileInfo
,除了FileInfo
之外的任何内容可以通过重新定义方法或参数来声明或更重要的是覆盖。
由于Python中的dict
对象允许键/值名称对,因此FileInfo
可以访问相同的机制。
答案 2 :(得分:1)
用于创建自己的自定义词典类型。
您可以为了您自己的特殊目的而覆盖__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__
函数:
def __setitem__(self, key, item):
self.data[key] = item
if key == "sensor":
print("Sensor activated!")
或者例如,每次用户读取“温度”键时,您都希望返回一个特殊值。为此,您继承了__getitem__
函数:
def __getitem__(self, key):
if key == "temperature":
return CurrentWeatherTemperature()
else:
return self.data[key]