Skip to main content

Atributos

En Programación Orientada a Objetos (POO), un atributo es una variable que pertenece a un objeto y que describe alguna característica o estado del objeto. Los atributos representan datos asociados a los objetos de una clase y se utilizan para modelar las características que distinguen a un objeto de otro. Por ejemplo, si estamos modelando una clase Persona, los atributos podrían ser el nombre, la edad, la altura, etc.

En Python, los atributos se definen dentro de la clase utilizando la notación self.nombre_atributo = valor. El atributo self es una referencia al objeto actual y se utiliza para acceder a los atributos y métodos dentro de la clase. Aquí tienes un ejemplo de cómo se definen y utilizan atributos en Python:

class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad

# Crear un objeto persona1 de la clase Persona con nombre "Juan" y edad 30
persona1 = Persona("Juan", 30)

# Acceder a los atributos del objeto persona1
print(persona1.nombre) # Imprime: Juan
print(persona1.edad) # Imprime: 30

En este ejemplo, la clase Persona tiene dos atributos: nombre y edad. Estos atributos se inicializan en el método __init__, que es el constructor de la clase. Cuando creamos un nuevo objeto persona1 de la clase Persona, pasamos los valores "Juan" y 30 como argumentos al constructor, que asigna estos valores a los atributos nombre y edad del objeto.

Luego, para acceder a los atributos de un objeto, utilizamos la sintaxis nombre_objeto.nombre_atributo. Por ejemplo, persona1.nombre nos dará el valor del atributo nombre del objeto persona1.

Además de acceder a los atributos, también podemos modificarlos directamente utilizando la misma sintaxis. Por ejemplo:

# Modificar el atributo edad del objeto persona1
persona1.edad = 31

# Acceder al atributo modificado
print(persona1.edad) # Imprime: 31

En resumen, un atributo en POO es una variable que describe una característica o estado de un objeto. En Python, los atributos se definen dentro de la clase utilizando la notación self.nombre_atributo = valor, y se accede a ellos utilizando la sintaxis nombre_objeto.nombre_atributo.

Atributos públicos, privados y protegidos

En Programación Orientada a Objetos (POO), los atributos de una clase pueden tener diferentes niveles de visibilidad, lo que determina quién puede acceder y modificar esos atributos. Los tres niveles de visibilidad más comunes son: público, privado y protegido.

  1. Atributo Público:

    • Un atributo público es accesible desde fuera de la clase. Cualquier código externo puede leer y modificar este atributo directamente.
    • En Python, todos los atributos de una clase son públicos por defecto, a menos que se indique lo contrario mediante convenciones de nomenclatura.
    class Persona:
    def __init__(self, nombre):
    self.nombre = nombre

    persona = Persona("Juan")
    print(persona.nombre) # Acceso directo al atributo público
    persona.nombre = "Pedro" # Modificación directa del atributo público
  2. Atributo Privado:

    • Un atributo privado solo puede ser accesible y modificado dentro de la propia clase. No se puede acceder a él desde fuera de la clase.
    • En Python, los atributos privados se definen utilizando una convención de nomenclatura que consiste en agregar dos guiones bajos (__) al principio del nombre del atributo.
    class Persona:
    def __init__(self, nombre):
    self.__nombre = nombre # Atributo privado

    persona = Persona("Juan")
    print(persona.__nombre) # Esto daría un error porque el atributo es privado
  3. Atributo Protegido:

    • Un atributo protegido es similar a un atributo privado, pero puede ser accesible desde las clases derivadas (herencia).
    • En Python, los atributos protegidos se definen utilizando una convención de nomenclatura que consiste en agregar un guion bajo (_) al principio del nombre del atributo.
    class Persona:
    def __init__(self, nombre):
    self._nombre = nombre # Atributo protegido

    class Estudiante(Persona):
    def __init__(self, nombre, grado):
    super().__init__(nombre)
    self.grado = grado

    def mostrar_nombre(self):
    print(self._nombre) # Acceso al atributo protegido desde la clase derivada

    estudiante = Estudiante("Pedro", "Bachillerato")
    estudiante.mostrar_nombre() # Acceso al atributo protegido desde el método de la clase derivada

En resumen, los atributos públicos son accesibles desde cualquier lugar, los atributos privados solo son accesibles desde dentro de la clase que los define, y los atributos protegidos son accesibles desde la clase que los define y sus clases derivadas. Estos niveles de visibilidad permiten controlar y restringir el acceso a los datos de una clase, lo que ayuda a garantizar la integridad y seguridad de los objetos.