DEV Community

Nahuel Segovia
Nahuel Segovia

Posted on

POO - Encapsulamiento

Cuando hablamos de encapsulación nos referimos generalmente a definir grados o niveles de acceso y modificación para nuestros métodos y atributos. En Python específicamente no existe como tal una 'protección' real hacía los atributos de una clase, ya que estos se pueden acceder de forma pública simplemente a través de la instancia. Lo que se hace para evitar que estos atributos sean cambiados es usar convenciones ya definidas por Python que nos permiten HACER SABER que esos atributos pueden ser accedidos solamente por la clase en la que se encuentran o por las clases que heredan de la misma:

self.__body < de esta forma, con dos guiones bajos, especificamos que únicamente vamos a poder acceder a este atributo estando dentro de la clase en la que se declaró,lo que se conoce como ACCESO PRIVADO

self._body < de esta forma, con un guion bajo, especificamos que la propiedad puede ser accedida tanto como la clase en donde fue declarada, como en las que hereden de esta, lo que se conoce como ACCESO PROTEGIDO

¿Por qué en Python no existe como tal una forma real de proteger a estos atributos?

  • Porque en realidad todos estos atributos son de acceso público, ya que podemos acceder a ellos y modificarlos a través de la instancia simplemente llamando a la misma clase:
post = Post('Titulo del post', 'contenido del post', 'programacion', 'Nahuel')
Enter fullscreen mode Exit fullscreen mode

*Para el caso donde el acceso sea "PRIVADO" post.Post._title = 'Cambiando el valor del título'

*Para el caso donde el acceso sea "PROTEGIDO" post._Post._title = 'Cambiando el valor de título'

def __init__(self, title, body, hashtags, author):
        self._title = title
        self._body = body
        self._hashtags = hashtags
        self._author = author

    def get_name(self): return self._title
    def get_body(self): return self._body
    def get_hashtags(self): return self._hashtags
    def get_author(self): return self._author`
Enter fullscreen mode Exit fullscreen mode

Discussion (0)