GeeksforGeeks
Prérequis : Underscore in Python
En Python, il n’existe pas de variables d’instance « Private » auxquelles on ne peut accéder qu’à l’intérieur d’un objet. Cependant, une convention est suivie par la plupart du code Python et des codeurs c’est-à-dire qu’un nom préfixé par un underscore, Par exemple _geek doit être traité comme une partie non publique de l’API ou de tout code Python, que ce soit une fonction, une méthode ou un membre de données. En passant par là, nous essaierions également de comprendre le concept des différentes formes de soulignement de fin, Par exemple, for _ in range(10), __init__(self).
Le maniement et son fonctionnement
En Python, il y a quelque chose appelé le maniement des noms, ce qui signifie qu’il y a un support limité pour un cas d’utilisation valide pour les membres privés des classes essentiellement pour éviter les conflits de noms avec les noms définis par les sous-classes. Tout identifiant de la forme __geek (au moins deux tirets de soulignement en tête ou au plus un tiret de soulignement en queue) est remplacé par _classname__geek, où classname est le nom de la classe actuelle, sans tiret de soulignement en tête. Tant que cela se produit dans la définition de la classe, cette manipulation est effectuée. Ceci est utile pour laisser les sous-classes surcharger les méthodes sans casser les appels de méthode intra-classe.
Regardons cet exemple et essayons de trouver comment fonctionne ce soulignement :
Les règles de soulignement sont surtout conçues pour éviter les accidents mais il est toujours possible d’accéder ou de modifier une variable considérée comme privée. Cela peut même être utile dans des circonstances particulières, comme dans le débogueur.
Single Leading Underscores
Donc, en gros, un soulignement au début d’une méthode, d’une fonction ou d’un membre de données signifie que vous ne devez pas accéder à cette méthode car elle ne fait pas partie de l’API. Regardons ce bout de code :
Ce bout de code est extrait du code source de Django (django/forms/forms.py). Cela suggère que errors est une propriété, et qu’elle fait également partie de l’API, mais la méthode, _get_errors, est « privée », donc on ne doit pas y accéder.
__Double soulignement en tête
Deux soulignements, au début, provoquent beaucoup de confusion. Il s’agit d’une question de syntaxe plutôt que d’une convention. Le double soulignement va mutiler les noms d’attributs d’une classe pour éviter les conflits de noms d’attributs entre les classes. Par exemple :
__Double soulignement de tête et double soulignement de queue__
Il y a un autre cas de double soulignement de tête et de queue. Nous le suivons tout en utilisant des variables ou des méthodes spéciales (appelées » méthode magique « ) telles que__len__, __init__. Ces méthodes fournissent des caractéristiques syntaxiques spéciales aux noms. Par exemple, __file__ indique l’emplacement du fichier Python, __eq__ est exécuté lorsque l’expression a == b est exécutée.
Exemple :
.
class
Geek:
def
__init__(
self
, ab):
self
.ab
=
ab
def
__custom__(
self
):
pass
This article is contributed by Chinmoy Lenka. Si vous aimez GeeksforGeeks et que vous souhaitez contribuer, vous pouvez également écrire un article en utilisant contribute.geeksforgeeks.org ou envoyer votre article par courrier à [email protected]. Voyez votre article apparaître sur la page principale de GeeksforGeeks et aidez d’autres Geeks.
J’ai référencé Python Docs, hackernoon.com et igorsobreira.com
Veuillez écrire des commentaires si vous trouvez quelque chose d’incorrect, ou si vous voulez partager plus d’informations sur le sujet abordé ci-dessus.
Attention geek ! Renforcez vos fondations avec le cours de base de programmation Python et apprenez les bases.
Pour commencer, vos préparations d’entretien Améliorez vos concepts de structures de données avec le cours Python DS.