Tutorial del Python static method: sintaxis y uso

Se puede acceder a los métodos estáticos utilizando directamente el nombre de la clase, sin necesidad de crear una instancia de la clase. La función static method de Python promueve, por tanto, una clara separación entre la lógica de la clase y los datos de la instancia.

¿Para qué sirve el Python static method?

Python static method es una función y un decorador que se utiliza para identificar métodos que operan independientemente de las instancias de la clase. Los decoradores en Python son funciones que modifican el comportamiento de otros métodos añadiendo funcionalidades antes o después de su ejecución, sin influir en el propio código de la función. A diferencia de los métodos de instancia, las funciones estáticas no requieren un parámetro implícito como self para las instancias.

Este método de Python ofrece una manera específica de organizar funciones dentro de las clases que no necesitan acceder a datos de instancia. Al no estar vinculadas a una instancia, no pueden modificar el estado de un objeto. Son herramientas útiles dentro de la clase, pues sirven para realizar tareas generales o proporcionar funcionalidades globales. Por ejemplo, pueden contener utilidades, rutinas de conversión o funciones generales de ayuda a las que se puede acceder sin datos de instancia.

¿Cuál es la sintaxis del Python static method?

Existen dos formas de crear métodos estáticos en Python: o bien utilizar la función staticmethod(), o bien el decorador @staticmethod.

staticmethod()

Python staticmethod() es una función incorporada que convierte un método de una clase en estático. El valor de retorno de la función staticmethod() es un método estático para la función que se pasa como argumento. Se escribe de la siguiente forma:

class clase:
    def staticmethodFunc(x,y):
        return x + y
Class.staticmethodFunc = staticmethod(Class.staticmethodFunc)
print('Sum = ', Class.staticmethodFunc(5,7)) # Output: Sum = 12
python

Al pasar la función staticmethodFunc() que está definida en la clase Class como argumento a staticmethod(), puedes acceder a tu propio método directamente a través del nombre de la clase.

@staticmethod

El decorador @staticmethod es un método más corto y habitual de marcar una función como estática. El decorador se coloca encima del método en la definición de la clase. Esta es su sintaxis:

class Class:
    @staticmethod
    def staticmethodFunc(x, y):
        return x + y
print('Sum = ', Class.staticmethodFunc(5,7)) # Output: Sum = 12
python

El decorador @staticmethod le indica al intérprete que la función definida debe tratarse como un método estático.

Ejemplos de código para usar el Python static method

Puedes utilizar métodos estáticos para diferentes tareas. Echa un vistazo a los ejemplos que presentamos a continuación.

Convertir unidades

El Python static method resulta muy útil para convertir unidades.

class Converter:
    @staticmethod
    def hoursToMinutes(hours):
        return hours * 60
    @staticmethod
    def minutesToHours(minutes):
        return minutes / 60
hours = 3
converted_minutes = Converter.hoursToMinutes(hours)
print(f"{hours} hours are {converted_minutes} minutes.") # Output: 3 hours are 180 minutes.
minutes = 180
converted_hours = Converter.minutesToHours(minutes)
print(f"{minutes} minutes are {converted_hours} hours.") # Output: 180 minutes are 3 hours.
python

En este ejemplo, la clase Converter tiene dos métodos estáticos para convertir entre horas y minutos. El método hoursToMinutes() convierte horas en minutos, mientras que minutesToHours() convierte minutos en horas.

Se accede a los métodos estáticos utilizando el nombre de la clase sin que sea necesario crear una instancia de la clase. El acceso se realiza directamente a través de Converter.hoursToMinutes() o Converter.minutesToHours(), en los que Converter es el nombre de la clase. El resultado se muestra utilizando un f-string, que es un método de formato de cadena o Python string format que permite combinar expresiones dentro de una cadena de texto.

Funciones de ayuda para realizar cálculos matemáticos

El Python static method también se puede utilizar para definir funciones de ayuda para cálculos secundarios de la siguiente manera:

class Calculator:
    @staticmethod
    def square(x):
        return x * x
    @staticmethod
    def sqroot(x):
        return x ** 0.5
num = 9
square = Calculator.square(num)
print(f"The square of {num} is {square}.") # Output: The square of 9 is 81.
root = Calculator.sqroot(num)
print(f"The square root of {num} is {root}.") # Output: The square root of 9 is 3.
python

El código de ejemplo muestra la clase Calculator con métodos estáticos para calcular el cuadrado y la raíz cuadrada de un número. Mediante el decorador @staticmethod se marca square() (cuadrado) y sqroot() (raíz cuadrada) como métodos estáticos. Sin crear una instancia de la clase, se puede acceder a los métodos a través del nombre de la clase. después, el resultado de Calculator.square() y Calculator.sqroot() se concatena en un f-string.

Validar entradas

Otro uso del Python static method es la validación de entradas.

class Validator:
    @staticmethod
    def isInteger(num):
        try:
            int(num)
            return True
        except ValueError:
            return False
    @staticmethod
    def isDecimal(num):
        try:
            float(num)
            return True
        except ValueError:
            return False
input = "123"
is_integer = Validator.isInteger(input)
print(f"Is '{input}' an integer? {is_integer}") # Output: Is '123' an integer? True
input = "3.14"
is_dec = Validator.isDecimal(input)
print(f"Is '{input}' a decimal number? {is_dec}") # Output: Is '3.14' a decimal number? True
python

La clase Validator comprende dos métodos estáticos: isInteger() y isDecimal(). Estas funciones comprueban si una entrada dada es un número entero o decimal. El static method de Python isInteger() toma una entrada e intenta convertirla en un número entero (int(num)). En caso de lograrlo, devuelve True. De lo contrario, se obtiene False si se captura una excepción ValueError, algo que se da cuando la validación no es posible.

El método isDecimal() se utiliza para convertir la entrada en un número decimal (float(num)). En caso de conseguirlo, se devuelve True y, si no, False. Después, se utilizan los métodos estáticos isInteger() y isDecimal() de la clase Validator para verificar las entradas "123" y "3.14". Los resultados son verdaderos para ambas funciones.

Manipular strings

class StringManipulation:
    @staticmethod
    def reverseText(text):
        return text[::-1]
input_text = "Hello World!"
result = StringManipulation.reverseText(input_text)
print(f"Reversed text of '{input_text}': {result}") # Output: Reversed text of 'Hello World!': !dlroW olleH
python

En este ejemplo, se define una clase StringManipulation con un método estático reverseText(). Este método toma un texto como parámetro y utiliza la sintaxis de slicing [::-1] para invertir el texto "Hello World!" y devolver el resultado.

¿Le ha resultado útil este artículo?
Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continua navegando, consideramos que acepta su uso. Puede obtener más información, o bien conocer cómo cambiar la configuración de su navegador en nuestra. Política de Cookies.
Page top