La encapsulación es uno de los conceptos fundamentales en programación orientada a objetos (POO) en pitón. Describe la idea de empaquetar datos y los métodos que funcionan con datos dentro de una unidad. Esto impone restricciones al acceso directo a variables y métodos y puede evitar la modificación accidental de datos. Una clase es un ejemplo de encapsulación ya que encapsula todos los datos que son miembros. funciones , variables , etc. Ahora bien, puede haber algunos escenarios en los que necesitemos imponer restricciones a algunos métodos de la clase para que no se pueda acceder a ellos fuera de la clase ni por ninguna subclase. Para implementar esto entran en juego métodos privados.
PAGfunciones privadas en Python
Considere un ejemplo de la vida real, el motor de un automóvil, que se compone de muchas piezas como bujías, válvulas, pistones, etc. Ningún usuario utiliza estas piezas directamente, sino que simplemente sabe cómo utilizar las piezas que las utilizan. Para esto se utilizan los métodos privados. Se utiliza para ocultar la funcionalidad interna de cualquier clase del mundo exterior. métodos privados son aquellos métodos a los que no se debe acceder fuera de la clase ni por ninguna clase base. En Python, no existen métodos privados a los que no se pueda acceder excepto dentro de una clase. Sin embargo, para definir un método privado, prefije el nombre del miembro con el doble guión bajo __ . Nota: El método __init__ es un constructor y se ejecuta tan pronto como se crea una instancia de un objeto de una clase.
Python3
diferencia entre un tigre y un león
# 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> |
>
conversión de tipos y conversión de tipos en java
>
Producción:
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'>
El ejemplo anterior muestra que no se puede acceder a los métodos privados de la clase fuera de la clase ni por ninguna clase base. Sin embargo, se puede acceder a los métodos privados llamando a los métodos privados a través de métodos públicos.
Ejemplo:
Python3
flotar a la cuerda
# 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>()> |
>
>
123película
Producción:
Public method Private method>
Manipulación de nombres
Python proporciona una varita mágica que también se puede usar para llamar a métodos privados fuera de la clase, lo que se conoce como alteración de nombres. Significa que cualquier identificador de la forma __geek (al menos dos guiones bajos iniciales o como máximo un guión bajo final) se reemplaza con _classname__geek, donde el nombre de la clase es el nombre de la clase actual sin un guión bajo inicial.
Ejemplo:
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()> |
>
punto numeroso
>
Producción:
Private method>