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.
-
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 -
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 -
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.