# 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:

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

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:

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

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.

```python
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.
```

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](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/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:

```python
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.
```

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.

```python
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
```

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

```python
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
```

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.


This is a markdown version of: [https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/python-static-method/](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/python-static-method/) for AI/LLM consumption.