Articles

Python – Membres publics, Protégés, privés

Les langages orientés objet classiques, tels que C++ et Java, contrôlent l’accès aux ressources de classe par des mots-clés publics, privés et protégés. Les membres privés de la classe se voient refuser l’accès de l’environnement extérieur à la classe. Ils ne peuvent être gérés que depuis la classe.

Membres publics

Les membres publics (généralement les méthodes déclarées dans une classe) sont accessibles depuis l’extérieur de la classe. L’objet de la même classe est requis pour appeler une méthode publique. Cette disposition des variables d’instance privées et des méthodes publiques assure le principe d’encapsulation des données.

Tous les membres d’une classe Python sont publics par défaut. Tout membre est accessible depuis l’extérieur de l’environnement de classe.

Exemple: Attributs publics

Copiez

class Student: schoolName = 'XYZ School' # class attribute def __init__(self, name, age): self.name=name # instance attribute self.age=age # instance attribute

Vous pouvez accéder aux attributs de la classe Student et également modifier leurs valeurs, comme indiqué ci-dessous.

Exemple: Access Public Members

Copy

>>> std = Student("Steve", 25)>>> std.schoolName'XYZ School'>>> std.name'Steve'>>> std.age = 20>>> std.age25

Membres protégés

Les membres protégés d’une classe sont accessibles depuis l’intérieur de la classe et sont également disponibles pour ses sous-classes. Aucun autre environnement n’est autorisé à y accéder. Cela permet d’hériter des ressources spécifiques de la classe parent par la classe enfant.

La convention de Python pour protéger une variable d’instance est d’y ajouter un préfixe _ (trait de soulignement unique). Cela empêche efficacement son accès à moins qu’il ne provienne d’une sous-classe.

Exemple: Attributs protégés

Copy

class Student: _schoolName = 'XYZ School' # protected class attribute def __init__(self, name, age): self._name=name # protected instance attribute self._age=age # protected instance attribute

En fait, cela n’empêche pas les variables d’instance d’accéder ou de modifier l’instance. Vous pouvez toujours effectuer les opérations suivantes :

Exemple : Access Protected Members

Copy

>>> std = Student("Swati", 25)>>> std._name'Swati'>>> std._name = 'Dipa'>>> std._name'Dipa'

Cependant, vous pouvez définir une propriété à l’aide du décorateur de propriétés et la protéger, comme indiqué ci-dessous.

Exemple: Attributs protégés

Copiez

class Student:def __init__(self,name):self._name = name@propertydef name(self):return [email protected] name(self,newname):self._name = newname

Ci-dessus, @property decorator est utilisé pour faire de la méthode name() comme propriété et @name.setter décorateur une autre surcharge du en tant que méthode de définition de propriétés. Maintenant, _name est protégé.

Exemple: Accès aux Membres protégés

Copie

>>> std = Student("Swati")>>> std.name'Swati'>>> std.name = 'Dipa'>>> std.name'Dipa'>>> std._name # still accessible

Ci-dessus, nous avons utilisé la propriété std.name pour modifier l’attribut _name . Cependant, il est toujours accessible en Python. Par conséquent, le programmeur responsable s’abstiendrait d’accéder et de modifier les variables d’instance préfixées par _ depuis l’extérieur de sa classe.

PUBLICITÉ

Membres privés

Python n’a aucun mécanisme qui limite efficacement l’accès à toute variable ou méthode d’instance. Python prescrit une convention de préfixer le nom de la variable / méthode avec un trait de soulignement simple ou double pour émuler le comportement des spécificateurs d’accès protégés et privés.

Le double trait de soulignement __ préfixé à une variable la rend privée. Cela donne une forte suggestion de ne pas le toucher de l’extérieur de la classe. Toute tentative de le faire entraînera une erreur d’attribut :

Exemple : Attributs privés

Copy

class Student: __schoolName = 'XYZ School' # private class attribute def __init__(self, name, age): self.__name=name # private instance attribute self.__salary=age # private instance attribute def __display(self): # private method print('This is private method.')
Exemple:

Copy

>>> std = Student("Bill", 25)>>> std.__schoolNameAttributeError: 'Student' object has no attribute '__schoolName'>>> std.__nameAttributeError: 'Student' object has no attribute '__name'>>> std.__display()AttributeError: 'Student' object has no attribute '__display'

Python effectue une modification du nom des variables privées. Chaque membre avec un double trait de soulignement sera remplacé par _object._class__variable. Ainsi, il est toujours accessible depuis l’extérieur de la classe, mais la pratique doit être évitée.

Exemple:

Copy

>>> std = Student("Bill", 25)>>> std._Student__name'Bill'>>> std._Student__name = 'Steve'>>> std._Student__name'Steve'>>> std._Student__display()'This is private method.'

Ainsi, Python fournit une implémentation conceptuelle de modificateurs d’accès publics, protégés et privés, mais pas comme d’autres langages comme C #, Java, C++.