CodeGym /Cursos /Python SELF ES /Inicialización de un objeto

Inicialización de un objeto

Python SELF ES
Nivel 15 , Lección 4
Disponible

4.1 Inicialización

Normalmente, justo después de la creación, los objetos aún no están listos para trabajar. Primero necesitas pasarles todos los datos necesarios: parámetros de funcionamiento, valores iniciales, referencias a otros objetos, etc.

Este proceso se llama inicialización y debe realizarse inmediatamente después de la creación del objeto.

Supongamos que tienes una clase Gato (Cat) y quieres asignarle un nombre y una edad, esto se puede hacer de varias maneras:

Inicialización de atributos después de la creación del objeto

En este ejemplo primero se crea:

  • un objeto vacío Cat.
  • una instancia de la clase Cat llamada barsik.
  • y luego se establecen dos atributos en el objeto barsik: name y age se añaden directamente al objeto.


class Cat:
    pass
        

# Creación del objeto Cat
barsik = Cat()
        
# Inicialización de atributos después de la creación del objeto
barsik.name = "Barsik"
barsik.age = 5
        
print(f"Nombre del gato: {barsik.name}, edad: {barsik.age}")  # Output: Nombre del gato: Barsik, edad: 5

Uso de un método para inicializar atributos

En este ejemplo se utiliza un método initialize para inicializar los atributos. El objeto Cat se crea sin un solo atributo, y luego el método initialize() se usa para asignar valores a los atributos.


class Cat:
    def initialize(self, name, age):
        self.name = name
        self.age = age
        

# Creación del objeto Cat
barsik = Cat()
        
# Inicialización de atributos a través del método
barsik.initialize("Barsik", 5)
        
print(f"Nombre del gato: {barsik.name}, edad: {barsik.age}")  # Output: Nombre del gato: Barsik, edad: 5

Uso de campos de clase

En este ejemplo, los atributos name y age se definen a nivel de clase. Después de crear el objeto barsik, los atributos se inicializan directamente.


class Cat:
    name = ""
    age = 0
        

# Creación del objeto Cat
barsik = Cat()
        
# Inicialización de atributos del objeto
barsik.name = "Barsik"
barsik.age = 5
        
print(f"Nombre del gato: {barsik.name}, edad: {barsik.age}")  # Output: Nombre del gato: Barsik, edad: 5

¿Cuál método es mejor? ¡Ninguno! Lo mejor es usar un constructor :)

4.2 Constructor

Constructor — es un método especial que se llama automáticamente al crear un nuevo objeto de clase. El constructor se usa para inicializar los campos del objeto y puede realizar cualquier acción inicial necesaria para configurar el objeto.

En Python, el constructor es un método llamado __init__. Aquí los principales hechos sobre él:

  • El método __init__ — es el constructor en Python. Se llama automáticamente, cuando se crea una nueva instancia de la clase.
  • __init__ acepta al menos un parámetro — self, que se refiere al objeto creado. Además, pueden pasarse otros parámetros para inicializar los atributos del objeto.
  • Dentro del método __init__ se pueden asignar valores iniciales a los atributos del objeto, usando self.
  • El constructor puede realizar cualquier acción necesaria para configurar el objeto, por ejemplo, comprobar los datos de entrada o establecer conexiones con otros objetos.

Los parámetros se pasan al constructor automáticamente, solo necesitas especificarlos dentro de los paréntesis al crear el objeto.

Así es como se verá la inicialización de nuestro gato usando un constructor:


class Cat:
    def __init__(self, name, age):
        self.name = name
        self.age = age


# Creación del objeto Cat con nombre y edad
barsik = Cat("Barsik", 5)

print(f"Nombre del gato: {barsik.name}, edad: {barsik.age}")  # Output: Nombre del gato: Barsik, edad: 5

Después de crear un objeto del tipo Cat, el método __init__ se llamará automáticamente, y se pasarán tres parámetros:

  • Referencia al objeto barsik en el parámetro self
  • Cadena «Barsik» en el parámetro name
  • Número 5 en el parámetro age

Es conveniente y bonito.

Validación de datos

También puedes realizar validaciones de datos en el constructor. Porque el objetivo del constructor es formar un objeto válido (correcto), con el que luego se podrá trabajar. Ejemplo:


class Cat:
    def __init__(self, name, age):
        if age < 0: raise ValueError("La edad no puede ser negativa")
        self.name = name
        self.age = age


# Creación del objeto Cat con verificación de edad
try:
    barsik = Cat("Barsik", -3)
except ValueError as e:
    print(e)  # Output: La edad no puede ser negativa
               
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION