3

私は現在、「DiveintoPython」という素晴らしい本を読んでいます。これまではすべてが理にかなっていますが、次の方法でいくつか疑問が残りました。クラスの初期化に関する章で:

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

それは私が得られない最後の行だけです。現時点で私が見ているように、呼び出し元のオブジェクトにはリストがあり、そのアイテム「名前」には渡された引数の値が割り当てられています。しかし、リストのインデックスには整数でしかアクセスできないと思っていたので、これは私には意味がありません。この本には、この行について次のように書かれています。「このオブジェクトの名前キーの値として引数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のようなクラスであると私が推測する継承です。dictのすべてのサブクラス(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オブジェクトはのサブクラスですUserDict。これは、ハッシュテーブルの形式です(辞書またはdictPythonで知られています)。最後の行は"name"、ファイル名のキーを作成するだけです。

于 2010-11-07T08:55:23.457 に答える