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')
*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`
Top comments (0)