2010-11-07 4 views
3

Je suis en train de lire ce livre intitulé "Dive into Python". Jusqu'à présent, tout a eu un sens pour moi, mais la méthode suivante m'a laissé quelques questions. C'est dans le chapitre sur l'initialisation des classes:Confus par self ["nom"] = nom de fichier

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

C'est seulement la dernière ligne que je n'ai pas. De la façon dont je le vois pour le moment, l'objet appelant a une liste, dont l'objet "nom" est assigné à la valeur de l'argument passé. Mais cela n'a pas de sens pour moi, puisque je pensais que vous ne pouvez accéder aux index de liste que par des entiers. Le livre dit ce qui suit à propos de cette ligne: "Vous affectez l'argument filename à la valeur de la clé de nom de cet objet." Le nom est-il une autre variable définie par chaque objet (par exemple, doc)? Et si oui, pourquoi peut-on y accéder comme ça?

+2

Plongez dans Python est un super livre gratuit! – soulseekah

+0

Wow - 5 réponses en moins de 5 minutes .. –

+0

@Tim McNamara Ma première réponse à propos de Python, d'ailleurs. –

Répondre

6

[...] n'est pas seulement pour les listes. Tout type peut le supporter, et l'index ne doit pas nécessairement être un entier. self est l'objet courant, qui selon votre code dérive de UserDict, qui supporte le item manipulation methods.

2

Vous étendons un dictionnaire, en faisant class FileInfo(UserDict), c'est pourquoi vous pouvez faire référence à la clé font self['name'] = filename

2

La classe hérite de UserDict que je suppose est une classe comme dict. Pour toutes les sous-classes de dicts (qui maintient l'interface dict intacte), vous pouvez traiter self comme dict, ce qui est la raison pour laquelle vous pouvez faire self[key] = value

2

Étant donné que votre classe dérive de UserDict, il hérite d'une méthode __getitem__() qui prend une clé arbitraire , pas seulement un nombre entier:

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

Non, l'objet self est une sous-classe de UserDict, qui est une forme de table de hachage (appelée dictionnaire ou dict en Python). La dernière ligne crée simplement une clé "name" au nom de fichier.