Je vais compléter Sven est (précis) de la réponse avec la réponse de la nature à la question de suivi (c'est à dire Pourquoi est - self
explicite plutôt qu'implicite?).
Python fonctionne de cette façon qu'il opère sur l'idée de la portée lexicale: les références de nom va toujours se référer à une variable locale dans la fonction en cours de définition, une variable locale d'une fonction contenante définition, une variable globale du module, ou d'une interface. (Le champ lexical que lorsque vous suivez l'arbre d'analyse vers le bas pendant le symbole de l'analyse, vous avez seulement besoin de se rappeler les noms vu dans les définitions de fonction sur le chemin vers le bas pour la fonction en cours - rien d'autre ne peut être traité comme "pas vu, donc globale ou intégrée". Il est également intéressant explicitement de noter que les règles de portée liés à l'imbrication de la fonction des définitions plutôt que des appels).
Les méthodes ne sont pas donnés à tout particulier d'un traitement spécial à cet égard de la classe états sont largement hors de propos à la portée lexicale règles, car il n'y a pas la même forte de la fonction vs méthode de distinction qui existe dans certaines langues (au Lieu de cela, les méthodes sont créées dynamiquement à partir de fonctions lorsque les attributs pertinents sont récupérées à partir d'objets).
Ceci permet de faire une fonction pour être ajouté à une classe après qu'il a déjà été définis et être impossible à distinguer de ceux des méthodes qui ont été définis dans le corps de la déclaration de classe (un processus connu sous le nom "monkeypatching").
Depuis l'objet d'espaces de noms sont séparés de la portée lexicale de règles, il est nécessaire de prévoir une autre façon de faire référence à ces attributs. C'est la tâche effectuée par l'explicite self
.
Notez que pour des algorithmes complexes, il n'est pas rare de cache des références à des variables membres comme des variables locales à l'intérieur de la méthode.