tipos-de-metodos-en-python

Métodos de Instancia, Clase y Estáticos en Python

En Python, los métodos son funciones incluidas dentro de la definición de una clase.

Existen tres tipos de métodos, que se diferencian en cómo se definen y a qué tienen acceso:

  • Método de instancia: Se utiliza cuando el método necesita acceder o modificar datos específicos de una instancia

  • Método de clase: Se utiliza cuando el método necesita acceder a datos que pertenecen a toda la clase, como atributos de clase compartidos

  • Método estático: Se utiliza cuando el método no depende de datos de instancia o clase y realiza una operación independiente

Métodos de instancia

Los métodos de instancia son métodos que actúan sobre las instancias de una clase. Tienen acceso a los atributos de esas instancias a través del parámetro self.

Son los métodos más comunes en Python y se definen dentro de una clase utilizando def.

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

    def saludar(self):
        return f"Hola, soy {self.nombre} y tengo {self.edad} años."

# Creación de instancia de persona
persona1 = Persona("Luis", 30)

# Llamada al método de instancia
print(persona1.saludar())  # Salida: Hola, soy Luis y tengo 30 años.

En este ejemplo

  • saludar() es un método de instancia
  • Utiliza self para acceder a los atributos nombre y edad de la instancia persona1.

Métodos de clase

Los métodos de clase son métodos que actúan sobre la clase misma (en lugar de las instancias individuales de la clase).

Se definen utilizando el decorador @classmethod y tienen acceso a la clase a través del parámetro cls.

class Coche:
    descuento = 0.1  # Descuento del 10% para todos los coches

    def __init__(self, marca, modelo, precio):
        self.marca = marca
        self.modelo = modelo
        self.precio = precio

    @classmethod
    def aplica_descuento(cls, precio):
        return precio * (1 - cls.descuento)

# Uso del método de clase
precio_final = Coche.aplica_descuento(30000)
print(f"Precio final con descuento: ${precio_final}")  # Salida: Precio final con descuento: $27000.0

En este ejemplo,

  • aplica_descuento() es un método de clase
  • Utiliza cls para acceder al atributo de clase descuento y aplicar un descuento al precio proporcionado.

Métodos estáticos

Los métodos estáticos son métodos que se relacionan con la clase pero no requieren acceso a sus atributos.

Se definen utilizando el decorador @staticmethod, y no dependen de la instancia (self) ni de la clase (cls).

class Utilidades:
    @staticmethod
    def sumar(a, b):
        return a + b

# Uso del método estático
resultado = Utilidades.sumar(3, 5)
print(f"Resultado de la suma: {resultado}")  # Salida: Resultado de la suma: 8

En este ejemplo,

  • sumar() es un método estático que realiza una operación simple de suma sin necesidad de acceder a atributos de instancia o clase.