3

我目前正在阅读这本很棒的书,名为“深入 Python”。到目前为止,一切对我来说都是有意义的,但是下面的方法给我留下了一些问题。它在关于初始化类的章节中:

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

这只是我没有得到的最​​后一行。我现在看到的方式,调用对象有一个列表,其项目“名称”被分配了传递参数的值。但这对我来说没有意义,因为我认为您只能通过整数访问列表索引。这本书对这一行说如下:“您将参数文件名分配为该对象的名称键的值。” 名称键是每个对象定义的另一个变量(如doc)吗?如果是,为什么可以这样访问它?

4

5 回答 5

6

[...]不仅适用于列表。任何类型都可以支持它,并且索引不一定必须是整数。self是当前对象,根据您的代码派生自UserDict,它支持项目操作方法

于 2010-11-07T08:55:07.937 回答
2

您正在通过做扩展字典,class FileInfo(UserDict)这就是为什么您可以参考键做self['name'] = filename

于 2010-11-07T08:54:29.780 回答
2

我认为继承的类UserDict是一个类似dict的类。对于dicts的所有子类(保持dict接口完整),你可以把self它当作一个dict,这就是你可以这样做的原因self[key] = value

于 2010-11-07T08:54:55.990 回答
2

由于您的类派生自UserDict,因此它继承了一个__getitem__()采用任意键的方法,而不仅仅是一个整数:

self["name"] = filename  # Associate the filename with the "name" key.
于 2010-11-07T08:55:00.887 回答
2

不,该self对象是 的子类,它是哈希表的一种形式(在 Python 中UserDict称为字典)。dict最后一行只是"name"为文件名创建一个键。

于 2010-11-07T08:55:23.457 回答