Función Python staticmethod()
Funciones integradas de Python3
staticmethod()Es una función integrada en Python utilizada para convertir un método en un método estático.
Un método estático es un método que pertenece a la clase y no a la instancia; no necesita acceder a atributos de instancia ni llamar a métodos de instancia.staticmethod()Puede usarse como decorador o llamarse directamente.
Significado de la palabra: staticmethodSístatic methodAbreviatura de (método estático).
Sintaxis básica y parámetros
Formato de sintaxis
staticmethod(function)
Descripción de parámetros
- Parámetro function:
- Tipo: objeto función
- Descripción: la función que se va a convertir en método estático.
Descripción de la función
- Valor de retorno: Devuelve un objeto de método estático.
- Características: Los métodos estáticos no necesitan
selfparámetro, y se pueden llamar directamente mediante el nombre de la clase.
Ejemplos
Ejemplo 1: Uso básico
Ejemplo
class MathUtils:
# Definir un método estático con un decorador (recomendado)
@staticmethod
def add(a, b):
return a + b
@staticmethod
def multiply(a, b):
return a * b
# Llamar directamente a través del nombre de la clase (no es necesario crear una instancia)
result = MathUtils.add(3, 5)
print(result) # Salida: 8
result = MathUtils.multiply(4, 6)
print(result) # Salida: 24
# Definir un método estático con un decorador (recomendado)
@staticmethod
def add(a, b):
return a + b
@staticmethod
def multiply(a, b):
return a * b
# Llamar directamente a través del nombre de la clase (no es necesario crear una instancia)
result = MathUtils.add(3, 5)
print(result) # Salida: 8
result = MathUtils.multiply(4, 6)
print(result) # Salida: 24
Resultado esperado de ejecución:
8 24
Análisis del código:
- Los métodos estáticos usan
@staticmethodun decorador para definirse. - Se pueden llamar como funciones normales, pero pertenecen al espacio de nombres de la clase.
- No es necesario crear una instancia de la clase para llamarlos.
Ejemplo 2: Sin usar decorador
Ejemplo
class Temperature:
@staticmethod
def celsius_to_fahrenheit(c):
return c * 9/5 + 32
@staticmethod
def fahrenheit_to_celsius(f):
return (f - 32) * 5/9
# Llamar al método estático
print(Temperature.celsius_to_fahrenheit(0)) # Salida: 32.0
print(Temperature.celsius_to_fahrenheit(100)) # Salida: 212.0
print(Temperature.fahrenheit_to_celsius(32)) # Salida: 0.0
# También se puede llamar a través de una instancia
temp = Temperature()
print(temp.celsius_to_fahrenheit(25)) # Salida: 77.0
@staticmethod
def celsius_to_fahrenheit(c):
return c * 9/5 + 32
@staticmethod
def fahrenheit_to_celsius(f):
return (f - 32) * 5/9
# Llamar al método estático
print(Temperature.celsius_to_fahrenheit(0)) # Salida: 32.0
print(Temperature.celsius_to_fahrenheit(100)) # Salida: 212.0
print(Temperature.fahrenheit_to_celsius(32)) # Salida: 0.0
# También se puede llamar a través de una instancia
temp = Temperature()
print(temp.celsius_to_fahrenheit(25)) # Salida: 77.0
Resultado esperado de ejecución:
32.0 212.0 0.0 77.0
Análisis del código:
- Los métodos estáticos se usan a menudo en clases de utilidades para encapsular funciones que no dependen de la instancia.
- Los métodos estáticos pueden llamarse mediante el nombre de la clase o el nombre de la instancia.
Ejemplo 3: Aplicación en el patrón de fábrica
Ejemplo
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
@staticmethod
def from_dict(data):
# Crear un objeto Person desde un diccionario
return Person(data['name'], data['age'])
@staticmethod
def create_adult(name):
# Crear un adulto
return Person(name, 18)
# Crear objetos usando un método estático
p1 = Person.from_dict({'name': 'Tom', 'age': 20})
print(p1.name, p1.age) # Salida: Tom 20
p2 = Person.create_adult('Jack')
print(p2.name, p2.age) # Salida: Jack 18
def __init__(self, name, age):
self.name = name
self.age = age
@staticmethod
def from_dict(data):
# Crear un objeto Person desde un diccionario
return Person(data['name'], data['age'])
@staticmethod
def create_adult(name):
# Crear un adulto
return Person(name, 18)
# Crear objetos usando un método estático
p1 = Person.from_dict({'name': 'Tom', 'age': 20})
print(p1.name, p1.age) # Salida: Tom 20
p2 = Person.create_adult('Jack')
print(p2.name, p2.age) # Salida: Jack 18
Resultado esperado de ejecución:
Tom 20 Jack 18
Los métodos estáticos se usan a menudo como métodos de fábrica para crear instancias de objetos desde diferentes fuentes de datos.
Funciones integradas de Python3
Otras extensiones