Se puede acceder a los métodos estáticos uti­li­za­n­do di­re­c­ta­me­n­te 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 se­pa­ra­ció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 ide­n­ti­fi­car métodos que operan in­de­pe­n­die­n­te­me­n­te de las in­s­ta­n­cias de la clase. Los de­co­ra­do­res en Python son funciones que modifican el co­m­po­r­ta­mie­n­to de otros métodos añadiendo fu­n­cio­na­li­da­des antes o después de su ejecución, sin influir en el propio código de la función. A di­fe­re­n­cia de los métodos de instancia, las funciones estáticas no requieren un parámetro implícito como self para las in­s­ta­n­cias.

Este método de Python ofrece una manera es­pe­cí­fi­ca de organizar funciones dentro de las clases que no necesitan acceder a datos de instancia. Al no estar vi­n­cu­la­das a una instancia, no pueden modificar el estado de un objeto. Son he­rra­mie­n­tas útiles dentro de la clase, pues sirven para realizar tareas generales o pro­po­r­cio­nar fu­n­cio­na­li­da­des globales. Por ejemplo, pueden contener uti­li­da­des, rutinas de co­n­ve­r­sión o funciones generales de ayuda a las que se puede acceder sin datos de instancia.

Hosting
Hosting de primera al mejor precio
  • 3x más rápido, ahora un 60 % de ahorro
  • Alta di­s­po­ni­bi­li­dad >99.99 %
  • Solo en IONOS: hasta 500 GB incluidos

¿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 in­co­r­po­ra­da que convierte un método de una clase en estático. El valor de retorno de la función sta­ti­c­me­thod() 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 di­re­c­ta­me­n­te 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 de­fi­ni­ció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 in­té­r­pre­te 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 di­fe­re­n­tes tareas. Echa un vistazo a los ejemplos que pre­se­n­ta­mos a co­n­ti­nua­ció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 uti­li­za­n­do el nombre de la clase sin que sea necesario crear una instancia de la clase. El acceso se realiza di­re­c­ta­me­n­te a través de Converter.hoursToMinutes() o Converter.minutesToHours(), en los que Converter es el nombre de la clase. El resultado se muestra uti­li­za­n­do un f-string, que es un método de formato de cadena o Python string format que permite combinar ex­pre­sio­nes dentro de una cadena de texto.

Funciones de ayuda para realizar cálculos ma­te­má­ti­cos

El Python static method también se puede utilizar para definir funciones de ayuda para cálculos se­cu­n­da­rios 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 va­li­da­ció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 co­m­prue­ban si una entrada dada es un número entero o decimal. El static method de Python isInteger() toma una entrada e intenta co­n­ve­r­ti­r­la 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 va­li­da­ción no es posible.

El método isDecimal() se utiliza para convertir la entrada en un número decimal (float(num)). En caso de co­n­se­gui­r­lo, 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 re­su­l­ta­dos son ve­r­da­de­ros 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.

Ir al menú principal