Maison > développement back-end > Tutoriel Python > Les méthodes « privées » de Python sont-elles vraiment privées ?

Les méthodes « privées » de Python sont-elles vraiment privées ?

Barbara Streisand
Libérer: 2024-12-02 22:33:11
original
456 Les gens l'ont consulté

Are Python's

Pourquoi les méthodes « privées » de Python ne sont pas réellement privées

Malgré le préfixe double trait de soulignement couramment utilisé pour désigner les méthodes « privées » en Python, ces méthodes restent accessibles aux utilisateurs via une convention de dénomination légèrement différente.

L'interpréteur Python les renomme méthodes 'privées' vers "_ClassName__MethodName". Ainsi, la méthode prétendument « privée » « __myPrivateMethod() » peut être invoquée comme « _MyClass__myPrivateMethod() ».

Ce brouillage de nom n'est pas destiné à être une forme d'encapsulation ou à empêcher un accès extérieur. Au lieu de cela, cela sert à garantir que les sous-classes ne remplacent pas involontairement les méthodes « privées » de leurs superclasses.

Considérons l'exemple suivant :

class Foo(object):
    def __init__(self):
        self.__baz = 42
    def foo(self):
        print(self.__baz)
    
class Bar(Foo):
    def __init__(self):
        super(Bar, self).__init__()
        self.__baz = 21
    def bar(self):
        print(self.__baz)
Copier après la connexion

Lorsque nous créons une instance de Bar et appelons à la fois foo() et bar(), nous voyons le résultat suivant :

x = Bar()
x.foo()
42
x.bar()
21
Copier après la connexion

Comme en témoigne le résultat, la sous-classe remplace avec succès la valeur de __baz sans affecter l'attribut 'privé' de la superclasse. De plus, l'accès à x.__dict__ révèle que les deux versions de l'attribut __baz coexistent au sein de l'instance de sous-classe.

Bien que ce brouillage de nom puisse dissuader les remplacements accidentels, il n'empêche pas l'accès intentionnel aux méthodes « privées » à partir de sources externes. Par conséquent, les méthodes « privées » de Python ne sont pas véritablement privées et ne doivent pas être utilisées pour l'encapsulation.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal