recherche
Maisondéveloppement back-endTutoriel PythonExplorer la manipulation de noms en Python : qu'est-ce que c'est et comment cela fonctionne

Exploring Name Mangling in Python: What It Is and How It Works

Python est connu pour sa simplicité et sa lisibilité, mais lorsqu'il s'agit de programmation orientée objet (POO), il existe des mécanismes moins discutés qui sont cruciaux pour écrire du code robuste. L’un de ces mécanismes est la modification des noms. Cet article vous expliquera ce qu'est la modification de noms, pourquoi Python l'utilise et comment il peut aider à prévenir les collisions de noms dans des hiérarchies de classes complexes.

Qu'est-ce que la modification du nom

Python permet aux méthodes des classes d'être remplacées par des sous-classes. Cependant, cela peut parfois conduire à des conflits de noms lorsqu'une sous-classe remplace involontairement les attributs ou les méthodes de la classe parent. La modification des noms est un mécanisme utilisé par Python pour éviter ces conflits, en particulier pour les attributs censés être privés.

La modification des noms en Python est une fonctionnalité dans laquelle l'interpréteur modifie les noms des propriétés de classe privée afin de minimiser le risque qu'elles soient consultées et remplacées par erreur. Cela fournit un certain niveau de confidentialité dans les attributs de classe, bien qu'il ne soit pas strictement appliqué. Cependant, il ne s’agit pas d’une application stricte.

Définition technique

En Python, tout identifiant avec deux traits de soulignement en tête (__) et pas plus d'un trait de soulignement à la fin subira une modification de nom. L'interpréteur transforme le nom en le préfixant avec le nom de la classe.

Pourquoi Python utilise-t-il la modification des noms

Afin d'éviter les conflits de noms, en particulier dans le cas où les sous-classes peuvent avoir leurs propres variables pouvant remplacer les variables de la classe parent, Python implémente la modification des noms. La modification des noms résout ce problème.

from datetime import datetime, timedelta
from time import time, sleep

class Machine:
    def __init__(self, id):
        self.id = id
        self._started = time()

    def uptime(self):
        return time() - self._started

class PetrolMachine(Machine):
    def __init__(self, id):
        super().__init__(id)
        self._started = datetime.now()

    def cost(self):
        duration = datetime.now() - self._started
        return duration/timedelta(seconds=60) *0.02

worked = PetrolMachine('12345')
sleep(0.123)
print(f"uptime : {worked.uptime():.2f}")

Dans cet exemple, la classe Machine stocke un identifiant et enregistre l'heure de début à l'aide de la fonction time() de Python. Lorsque vous demandez une disponibilité, il calcule la différence entre l'heure actuelle et l'heure de début, qui est stockée sous forme de nombre à virgule flottante. La sous-classe PetrolMachine, cependant, stocke l'heure de début en utilisant datetime.now(). Lorsque nous essayons de calculer la disponibilité, le programme génère une erreur car il s'attend à ce que start_time soit un nombre à virgule flottante, mais il s'agit désormais d'un objet datetime. Ce conflit de noms peut survenir lorsque les attributs de sous-classe remplacent involontairement les attributs de la classe parent. La modification des noms permet d'éviter ce problème.

Comment fonctionne la modification des noms

Alors, comment la modification des noms aide-t-elle à résoudre ce problème ? Lorsqu'un attribut de classe est préfixé par deux traits de soulignement, Python modifie le nom en interne pour inclure le nom de la classe comme préfixe. Voici comment modifier la classe Machine pour éviter les conflits de noms en utilisant la modification de noms :

Nous pouvons résoudre l'erreur en appliquant une modification de nom à l'attribut __started dans la classe Machine, comme indiqué ci-dessous :

from datetime import datetime, timedelta
from time import time, sleep

class Machine:
    def __init__(self, id):
        self.id = id
        self.__started = time()

    def uptime(self):
        return time() - self.__started  

class PetrolMachine(Machine):
    def __init__(self, id):
        super().__init__(id)
        self._started = datetime.now()

    def cost(self):
        duration = datetime.now() - self._started
        return duration/timedelta(seconds=60) *0.02


worked = PetrolMachine('12345')
sleep(0.123)
print(f"uptime : {worked.uptime():.2f}")

Une façon simple d'exprimer la modification du nom est présentée ci-dessous. J'ai une classe ClassA, qui a une variable_privée, dont le nom est mutilé.

class MyClass:
    def __init__(self):
        self.__private_var = "I am private"

    def get_private_var(self):
        return self.__private_var

my_object = MyClass()
print(my_object.get_private_var())  # This works
print(my_object.__private_var)

Le deuxième print() déclenchera une AttributeError car la variable __private_var a été modifiée en termes de nom. En interne, Python a changé le nom en _MyClass__private_var, ce qui rend plus difficile l'accès depuis l'extérieur de la classe.

Accéder au nom mutilé

Bien que la modification du nom de Python soit conçue pour empêcher tout accès accidentel, elle n'impose pas une confidentialité stricte. Vous pouvez toujours accéder à l'attribut mangled en utilisant le nom complet mangled, bien que cela soit déconseillé. Voici comment cela fonctionne : mon_objet._MaClass__private_var

print(my_object._MyClass__private_var)

Quand Python modifie-t-il les noms

Je vais l'expliquer à travers un exemple simple

class MyClass:
    def __init__(self):
        self._protected_var = "I'm protected"
        self.__private_var__ = "I'm not mangled"

En Python, un trait de soulignement unique (par exemple, _protected_var) indique que l'attribut est "protégé" et ne doit pas être accessible directement depuis l'extérieur de la classe. Cependant, Python n'applique pas cela. En revanche, les noms avec deux traits de soulignement en tête (par exemple, __private_var) sont modifiés pour éviter tout remplacement accidentel. Il est important de noter que les noms avec des traits de soulignement doubles des deux côtés (par exemple, __special__) ne sont pas modifiés et sont réservés à des cas d'utilisation spéciaux tels que les méthodes magiques.

Avantages et limites

Avantages

  • Aide à éviter le remplacement accidentel des attributs de classe dans les sous-classes
  • Fournit un mécanisme léger pour la confidentialité sans être trop restrictif.

Limites

  • Ce n'est pas vraiment privé : d'autres développeurs peuvent toujours accéder au nom mutilé s'ils savent comment le faire.
  • Peut rendre le débogage et la lecture du code plus complexes en cas de surutilisation.

_ Malgré ces limitations, la modification des noms reste un outil utile dans la boîte à outils POO de Python. Bien qu’il ne s’agisse pas d’une application stricte de la confidentialité, cela permet d’éviter les conflits de noms et le remplacement accidentel d’attributs. Comprendre la modification des noms vous permettra d'écrire un code plus robuste et plus maintenable, en particulier lorsque vous travaillez avec des hiérarchies de classes complexes. Essayez-le dans vos projets et partagez vos expériences ou questions dans les commentaires ci-dessous !_

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Apprendre Python: 2 heures d'étude quotidienne est-elle suffisante?Apprendre Python: 2 heures d'étude quotidienne est-elle suffisante?Apr 18, 2025 am 12:22 AM

Est-ce suffisant pour apprendre Python pendant deux heures par jour? Cela dépend de vos objectifs et de vos méthodes d'apprentissage. 1) Élaborer un plan d'apprentissage clair, 2) Sélectionnez les ressources et méthodes d'apprentissage appropriées, 3) la pratique et l'examen et la consolidation de la pratique pratique et de l'examen et de la consolidation, et vous pouvez progressivement maîtriser les connaissances de base et les fonctions avancées de Python au cours de cette période.

Python pour le développement Web: applications clésPython pour le développement Web: applications clésApr 18, 2025 am 12:20 AM

Les applications clés de Python dans le développement Web incluent l'utilisation des cadres Django et Flask, le développement de l'API, l'analyse et la visualisation des données, l'apprentissage automatique et l'IA et l'optimisation des performances. 1. Framework Django et Flask: Django convient au développement rapide d'applications complexes, et Flask convient aux projets petits ou hautement personnalisés. 2. Développement de l'API: Utilisez Flask ou DjangorestFramework pour construire RestulAPI. 3. Analyse et visualisation des données: utilisez Python pour traiter les données et les afficher via l'interface Web. 4. Apprentissage automatique et AI: Python est utilisé pour créer des applications Web intelligentes. 5. Optimisation des performances: optimisée par la programmation, la mise en cache et le code asynchrones

Python vs. C: Explorer les performances et l'efficacitéPython vs. C: Explorer les performances et l'efficacitéApr 18, 2025 am 12:20 AM

Python est meilleur que C dans l'efficacité du développement, mais C est plus élevé dans les performances d'exécution. 1. La syntaxe concise de Python et les bibliothèques riches améliorent l'efficacité du développement. Les caractéristiques de type compilation et le contrôle du matériel de CC améliorent les performances d'exécution. Lorsque vous faites un choix, vous devez peser la vitesse de développement et l'efficacité de l'exécution en fonction des besoins du projet.

Python en action: exemples du monde réelPython en action: exemples du monde réelApr 18, 2025 am 12:18 AM

Les applications du monde réel de Python incluent l'analyse des données, le développement Web, l'intelligence artificielle et l'automatisation. 1) Dans l'analyse des données, Python utilise des pandas et du matplotlib pour traiter et visualiser les données. 2) Dans le développement Web, les cadres Django et Flask simplifient la création d'applications Web. 3) Dans le domaine de l'intelligence artificielle, Tensorflow et Pytorch sont utilisés pour construire et former des modèles. 4) En termes d'automatisation, les scripts Python peuvent être utilisés pour des tâches telles que la copie de fichiers.

Les principales utilisations de Python: un aperçu completLes principales utilisations de Python: un aperçu completApr 18, 2025 am 12:18 AM

Python est largement utilisé dans les domaines de la science des données, du développement Web et des scripts d'automatisation. 1) Dans la science des données, Python simplifie le traitement et l'analyse des données à travers des bibliothèques telles que Numpy et Pandas. 2) Dans le développement Web, les cadres Django et Flask permettent aux développeurs de créer rapidement des applications. 3) Dans les scripts automatisés, la simplicité de Python et la bibliothèque standard le rendent idéal.

Le but principal de Python: flexibilité et facilité d'utilisationLe but principal de Python: flexibilité et facilité d'utilisationApr 17, 2025 am 12:14 AM

La flexibilité de Python se reflète dans les systèmes de prise en charge et de type dynamique multi-paradigmes, tandis que la facilité d'utilisation provient d'une syntaxe simple et d'une bibliothèque standard riche. 1. Flexibilité: prend en charge la programmation orientée objet, fonctionnelle et procédurale, et les systèmes de type dynamique améliorent l'efficacité de développement. 2. Facilité d'utilisation: La grammaire est proche du langage naturel, la bibliothèque standard couvre un large éventail de fonctions et simplifie le processus de développement.

Python: la puissance de la programmation polyvalentePython: la puissance de la programmation polyvalenteApr 17, 2025 am 12:09 AM

Python est très favorisé pour sa simplicité et son pouvoir, adaptés à tous les besoins des débutants aux développeurs avancés. Sa polyvalence se reflète dans: 1) Facile à apprendre et à utiliser, syntaxe simple; 2) Bibliothèques et cadres riches, tels que Numpy, Pandas, etc.; 3) Support multiplateforme, qui peut être exécuté sur une variété de systèmes d'exploitation; 4) Convient aux tâches de script et d'automatisation pour améliorer l'efficacité du travail.

Apprendre le python en 2 heures par jour: un guide pratiqueApprendre le python en 2 heures par jour: un guide pratiqueApr 17, 2025 am 12:05 AM

Oui, apprenez Python en deux heures par jour. 1. Élaborer un plan d'étude raisonnable, 2. Sélectionnez les bonnes ressources d'apprentissage, 3. Consolider les connaissances apprises par la pratique. Ces étapes peuvent vous aider à maîtriser Python en peu de temps.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.