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.
- Rápido, seguro, flexible y escalable
- Seguro con SSL y protección DDoS
- Dominio y asesor personal 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 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
pythonAl 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
pythonEl 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.
pythonEn 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.
pythonEl 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
pythonLa 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
pythonEn 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.