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
llamadabarsik
. - y luego se establecen dos atributos en el objeto barsik:
name
yage
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, usandoself
. - 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
GO TO FULL VERSION