我正在阅读这本名为“潜入Python”的精彩书。到目前为止,一切都对我有意义,但以下方法给我留下了一些问题。它在关于初始化类的章节中:
class FileInfo(UserDict):
"store file metadata"
def __init__(self, filename=None):
UserDict.__init__(self)
self["name"] = filename
这只是我没有得到的最后一行。我现在看到它的方式,调用对象有一个列表,其项目“name”被赋予传递的参数的值。但这对我来说没有意义,因为我认为你只能通过整数访问列表索引。 该书对此行说了以下内容:“您将参数文件名指定为此对象的名称键的值。”名称是否是每个对象定义的另一个变量(如 doc )?如果是的话,为什么可以这样访问?
答案 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"
。