由self [“name”] =文件名混淆

时间:2010-11-07 08:51:05

标签: python self

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

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

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

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

该类继承自UserDict,我认为这是一个类似dict的类。对于dicts的所有子类(保持dict接口完整),您可以将self视为dict,这就是为什么你可以self[key] = value

答案 3 :(得分:2)

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

self["name"] = filename  # Associate the filename with the "name" key.

答案 4 :(得分:2)

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