对self["name"] = filename感到困惑

3 投票
5 回答
1155 浏览
提问于 2025-04-16 06:41

我现在正在读一本很棒的书,叫做《深入Python》。到目前为止,书里的内容我都能理解,但下面这个方法让我有些疑惑。它在讲初始化类的章节里:

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

我不太明白的就是最后一行。按我现在的理解,调用这个对象有一个列表,其中的项“name”被赋值为传入的参数。但这让我感到困惑,因为我以为只能用整数来访问列表的索引。书里对这一行的解释是:“你正在把参数filename的值赋给这个对象的name键。”那么,name键是每个对象定义的另一个变量吗(就像doc)?如果是的话,为什么可以这样访问呢?

5 个回答

2

因为你的类是从 UserDict 这个类派生出来的,所以它可以使用一个叫做 __getitem__() 的方法。这个方法可以接受任何类型的键,而不仅仅是整数:

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

不,这里的 self 对象是 UserDict 的一个子类,UserDict 是一种哈希表的形式,在 Python 中我们称它为字典或者 dict。最后一行代码只是把一个键 "name" 和文件名关联起来。

6

[...] 不仅仅是用来处理列表的。任何类型都可以支持它,而且索引不一定非得是整数。self 是当前的对象,根据你的代码,它是从 UserDict 这个类派生出来的,而 UserDict 支持一些可以操作数据的方法。

撰写回答