Recherche de site Web

Encapsulation en Python


Introduction

L’encapsulation est l’un des aspects fondamentaux de la programmation orientée objet. Il permet aux programmeurs de mieux contrôler la façon dont les données circulent dans leurs programmes et de protéger ces données. L’encapsulation transforme également les objets en pièces plus autonomes et fonctionnant indépendamment.

Le concept d’encapsulation s’appuie sur ce que vous avez fait dans les deux derniers guides avec les classes et les constructeurs. Les constructeurs sont généralement utilisés en étroite collaboration avec l’encapsulation et aident en fait à faire fonctionner l’encapsulation de manière transparente.

Modificateurs d’accès

Avant de pouvoir tirer parti de l’encapsulation, vous devez comprendre comment Python restreint l’accès aux données stockées dans les variables et les méthodes.

Python a différents niveaux de restriction qui contrôlent comment les données peuvent être accédées et à partir de où. Les variables et les méthodes peuvent être publiques, privées ou protégées. Ces désignations sont faites par le nombre de traits de soulignement avant la variable ou la méthode.

publique

Toutes les variables et méthodes que vous avez vues jusqu’à présent, à l’exception des constructeurs, ont été publiques. Les variables publiques et les méthodes peuvent être librement modifiées et exécutées de n’importe où, à l’intérieur ou à l’extérieur de la classe. Pour créer une variable ou une méthode publique, n’utilisez pas de traits de soulignement.

privée

La désignation private permet uniquement d’accéder à une variable ou à une méthode à partir de sa propre classe ou objet. Vous ne pouvez pas modifier la valeur d’une variable privée en dehors d’une classe. Les variables et méthodes privées sont précédées de deux traits de soulignement. Jetez un coup d’œil à l’exemple ci-dessous.

__make = 'Dodge'

Essayez d’utiliser cette classe d’avant. Définissez les variables du constructeur sur private. Essayez ensuite d’imprimer l’une des variables après qu’un objet a été instancié.


class Car(object):

    def __init__(self, make = 'Ford', model = 'Pinto', year = '1971', mileage = '253812',      color = 'orange'):
        self.__make = make
        self.__model = model
        self.__year = year
        self.__mileage = mileage

        self.__color = color


    def move_forward(self, speed):
        print("Your %s is moving forward at %s" % (self.__model, speed))


    def move_backward(self, speed):
        print("Moving backward at %s" % speed)


mycar = Car()

print(mycar.__model)

Vous recevrez un message d’erreur indiquant que la variable n’existe pas. C’est parce que cette variable est privée. Essayez maintenant d’exécuter la méthode move_forward.

mycar.move_forward

Tout fonctionne bien. C’est parce que la variable est accessible par une méthode au sein de la classe, et non en externe.

Il y a un hic ici. Python ne gère pas exactement les variables protégées aussi bien que d’autres langages orientés objet. Au lieu de protéger les variables, il change leur nom dans l’interpréteur. Cela permet de créer et d’exister différentes copies de la variable. Essayez de modifier l’une des variables protégées dans votre objet mycar et de l’imprimer.


mycar.__model = 'Mustang'
print(mycar.__model)

Maintenant, cela semble fonctionner, mais ce que vous avez imprimé est une copie étrange de la variable protégée. Essayez à nouveau d’utiliser la méthode move_forward.

mycar.move_forward

Il a imprimé la valeur originale de __model. Les variables existent indépendamment. Vous pouvez illustrer cela en imprimant l’objet sous forme de dictionnaire. Vous verrez deux variables différentes.

print(mycar.__dict__)

Protégé

Les variables et méthodes protégées sont très similaires aux variables privées. Vous n’utiliserez probablement pas très souvent des variables ou des méthodes protégées, mais il vaut toujours la peine de savoir ce qu’elles sont. Une variable protégée n’est accessible que par sa propre classe et par toutes les classes dérivées de celle-ci. C’est plus un sujet pour plus tard, mais sachez simplement que si vous utilisez une classe comme base d’une autre, les variables protégées peuvent être une bonne option. Les variables protégées commencent par un seul trait de soulignement.

Qu’est-ce que l’encapsulation

Donc, maintenant que vous savez comment fonctionnent les modificateurs d’accès, la partie suivante va sembler assez évidente. L’encapsulation est le processus d’utilisation de variables privées au sein des classes pour empêcher toute modification involontaire ou potentiellement malveillante des données. En contenant et en protégeant les variables au sein d’une classe, il permet à la classe et aux objets qu’elle crée de fonctionner comme des parties indépendantes, autonomes, fonctionnant dans la machine du programme lui-même.

Grâce à l’encapsulation, les variables et certaines méthodes ne peuvent être utilisées que par le biais des interfaces désignées par la classe elle-même.

Setters et Getters

Les interfaces utilisées pour interagir avec les variables encapsulées sont généralement appelées méthodes setter et getter, car elles sont utilisées pour définir et récupérer les valeurs des variables. Étant donné que des méthodes existent au sein d’une classe ou d’un objet, elles peuvent accéder aux variables privées et les modifier, alors que vous ne pourrez pas le faire depuis l’extérieur de la classe. Lorsque vous avez instancié votre objet mycar, vous avez essentiellement utilisé son constructeur comme méthode de réglage initiale.

Essayez d’écrire un ensemble de méthodes pour définir et obtenir la valeur de l’une des variables mycar.


def set_model(self, new_model):
	self.__model = new_model

def get_model(self):
	return self.__model

Cela peut sembler beaucoup de travail supplémentaire, mais ce n’est vraiment pas difficile du tout. D’une manière générale, c’est ainsi que vous devriez structurer vos classes et travailler avec des variables de classe.

Réflexions finales

L’encapsulation est une partie importante de la programmation orientée objet. C’est une grande partie de ce qui fait que les objets en programmation fonctionnent plus comme des objets physiques dans le monde réel. Il sert également à protéger les données stockées dans vos objets et fournit un contrôle et des conventions sur la façon dont vous devez gérer le flux de données à l’intérieur et à l’extérieur des classes.

Exercices

  1. Rendez toutes les variables de la classe Car privées.
  2. Essayez d’en imprimer un de l’extérieur de la classe.
  3. Modifiez la méthode move_forward pour utiliser le modèle de variable privée et appelez-la.
  4. Créez une méthode setter pour l’une des variables.
  5. Utilisez la méthode setter que vous avez créée pour modifier la valeur d’une variable.
  6. Créez une méthode getter pour la même variable que la méthode setter.
  7. Utilisez votre méthode getter pour accéder à cette variable et l’imprimer.

Articles connexes: