什么是dict类用于

时间:2012-01-03 16:50:31

标签: python

有人可以解释dict类的用途吗?此代码段来自 Dive Into Python

class FileInfo(dict):                  
    "store file metadata"
    def __init__(self, filename=None): 
        self["name"] = filename

我理解使用self['name'] = filename分配key = value对但是继承dict类与此有什么关系呢?请帮我理解。

3 个答案:

答案 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]