L'encapsulation est l'un des concepts fondamentaux de programmation orientée objet (POO) en Python. Il décrit l'idée d'encapsuler les données et les méthodes qui fonctionnent sur les données dans une seule unité. Cela impose des restrictions sur l'accès direct aux variables et aux méthodes et peut empêcher la modification accidentelle des données. Une classe est un exemple d'encapsulation car elle encapsule toutes les données membres les fonctions , variables , etc. Maintenant, il peut y avoir certains scénarios dans lesquels nous devons imposer des restrictions sur certaines méthodes de la classe afin qu'elles ne soient ni accessibles en dehors de la classe ni par aucune sous-classe. Pour mettre en œuvre cela, des méthodes privées entrent en jeu.
P.fonctions dérivées en Python
Prenons un exemple concret, un moteur de voiture, composé de nombreuses pièces comme des bougies d'allumage, des soupapes, des pistons, etc. Aucun utilisateur n'utilise ces pièces directement, il sait simplement comment utiliser les pièces qui les utilisent. C'est à cela que servent les méthodes privées. Il est utilisé pour cacher la fonctionnalité interne de n’importe quelle classe au monde extérieur. Méthodes privées sont ces méthodes qui ne doivent être accessibles ni en dehors de la classe ni par aucune classe de base. En Python, il n’existe pas de méthodes privées accessibles sauf à l’intérieur d’une classe. Cependant, pour définir une méthode privée, préfixez le nom du membre avec le double trait de soulignement __ . Note: La méthode __init__ est un constructeur et s'exécute dès qu'un objet d'une classe est instancié.
Python3
Shreya Ghoshal
# Creating a Base class> class> Base:> ># Declaring public method> >def> fun(>self>):> >print>(>'Public method'>)> ># Declaring private method> >def> __fun(>self>):> >print>(>'Private method'>)> # Creating a derived class> class> Derived(Base):> >def> __init__(>self>):> ># Calling constructor of> ># Base class> >Base.__init__(>self>)> >def> call_public(>self>):> ># Calling public method of base class> >print>(>'
Inside derived class'>)> >self>.fun()> >def> call_private(>self>):> ># Calling private method of base class> >self>.__fun()> # Driver code> obj1>=> Base()> # Calling public method> obj1.fun()> obj2>=> Derived()> obj2.call_public()> # Uncommenting obj1.__fun() will> # raise an AttributeError> # Uncommenting obj2.call_private()> # will also raise an AttributeError> |
>
convertir la date en chaîne
>
Sortir:
Public method Inside derived class Public method>
Traceback (most recent call last): File '/home/09d6f91fdb63d16200e172c7a925dd7f.py', line 43, in obj1.__fun() AttributeError: 'Base' object has no attribute '__fun' Traceback (most recent call last): File '/home/0d5506bab8f06cb7c842501d9704557b.py', line 46, in obj2.call_private() File '/home/0d5506bab8f06cb7c842501d9704557b.py', line 32, in call_private self.__fun() AttributeError: 'Derived' object has no attribute '_Derived__fun'>
L'exemple ci-dessus montre que les méthodes privées de la classe ne sont accessibles ni en dehors de la classe ni par aucune classe de base. Cependant, les méthodes privées sont accessibles en appelant les méthodes privées via les méthodes publiques.
Exemple:
Python3
multiplication matricielle en c
# Creating a class> class> A:> ># Declaring public method> >def> fun(>self>):> >print>(>'Public method'>)> ># Declaring private method> >def> __fun(>self>):> >print>(>'Private method'>)> ># Calling private method via> ># another method> >def> Help>(>self>):> >self>.fun()> >self>.__fun()> # Driver's code> obj>=> A()> obj.>Help>()> |
>
applications cachées sur cet appareil
>
Sortir:
Public method Private method>
Nom mutilé
Python fournit une baguette magique qui peut également être utilisée pour appeler des méthodes privées en dehors de la classe, elle est connue sous le nom de name mutilation. Cela signifie que tout identifiant de la forme __geek (au moins deux traits de soulignement de début ou au plus un trait de soulignement de fin) est remplacé par _classname__geek, où le nom de classe est le nom de classe actuel avec un ou plusieurs traits de soulignement de début supprimés.
Exemple:
Python3
# Creating a class> class> A:> ># Declaring public method> >def> fun(>self>):> >print>(>'Public method'>)> ># Declaring private method> >def> __fun(>self>):> >print>(>'Private method'>)> # Driver's code> obj>=> A()> # Calling the private member> # through name mangling> obj._A__fun()> |
boucle améliorée Java
>
>
Sortir:
Private method>