Método estático de Python ()

La función incorporada staticmethod () devuelve un método estático para una función determinada.

La sintaxis de staticmethod()es:

 staticmethod (función)

El uso staticmethod()se considera una forma no pitónica de crear una función estática.

Por lo tanto, en las versiones más recientes de Python, puede usar el @staticmethoddecorador.

La sintaxis de @staticmethodes:

 @staticmethod def func (argumentos,…)

parámetros staticmethod ()

El staticmethod()método toma un solo parámetro:

  • función : función que debe convertirse a un método estático

Valor de retorno de staticmethod ()

Los staticmethod()rendimientos de un método estático para una función pasa como el parámetro.

¿Qué es un método estático?

Los métodos estáticos, al igual que los métodos de clase, son métodos que están vinculados a una clase en lugar de a su objeto.

No requieren la creación de una instancia de clase. Entonces, no dependen del estado del objeto.

La diferencia entre un método estático y un método de clase es:

  • El método estático no sabe nada sobre la clase y solo se ocupa de los parámetros.
  • El método de clase funciona con la clase ya que su parámetro es siempre la clase misma.

Pueden ser llamados tanto por la clase como por su objeto.

 Class.staticmethodFunc () o incluso Class (). StaticmethodFunc ()

Ejemplo 1: crear un método estático usando staticmethod ()

 class Mathematics: def addNumbers(x, y): return x + y # create addNumbers static method Mathematics.addNumbers = staticmethod(Mathematics.addNumbers) print('The sum is:', Mathematics.addNumbers(5, 10))

Salida

 La suma es: 15 

¿Cuándo usas métodos estáticos?

1. Agrupación de funciones de utilidad en una clase

Los métodos estáticos tienen un caso de uso limitado porque, como los métodos de clase o cualquier otro método dentro de una clase, no pueden acceder a las propiedades de la clase en sí.

Sin embargo, cuando necesita una función de utilidad que no tiene acceso a ninguna propiedad de una clase pero tiene sentido que pertenece a la clase, usamos funciones estáticas.

Ejemplo 2: crear una función de utilidad como método estático

 class Dates: def __init__(self, date): self.date = date def getDate(self): return self.date @staticmethod def toDashDate(date): return date.replace("/", "-") date = Dates("15-12-2016") dateFromDB = "15/12/2016" dateWithDash = Dates.toDashDate(dateFromDB) if(date.getDate() == dateWithDash): print("Equal") else: print("Unequal")

Salida

 Igual

Aquí, tenemos una Datesclase que solo funciona con fechas con guiones. Sin embargo, en nuestra base de datos anterior, todas las fechas estaban presentes en barras.

Para convertir las fechas de barra inclinada a fechas de guión, hemos creado una función de utilidad toDashDatedentro de Dates.

Es un método estático porque no necesita acceder a ninguna propiedad de Datessí mismo y solo requiere los parámetros.

También podemos crear toDashDatefuera de la clase, pero como solo funciona para fechas, es lógico mantenerlo dentro de la Datesclase.

2. Tener una sola implementación

Los métodos estáticos se utilizan cuando no queremos que las subclases de una clase cambien / anulen una implementación específica de un método.

Ejemplo 3: ¿Cómo funciona la herencia con el método estático?

 class Dates: def __init__(self, date): self.date = date def getDate(self): return self.date @staticmethod def toDashDate(date): return date.replace("/", "-") class DatesWithSlashes(Dates): def getDate(self): return Dates.toDashDate(self.date) date = Dates("15-12-2016") dateFromDB = DatesWithSlashes("15/12/2016") if(date.getDate() == dateFromDB.getDate()): print("Equal") else: print("Unequal")

Salida

 Igual

Aquí, no queremos que la subclase DatesWithSlashesanule el método de utilidad estática toDashDateporque solo tiene un uso único, es decir, cambia la fecha a fechas de guión.

Podríamos usar fácilmente el método estático a nuestro favor reemplazando el getDate()método en la subclase para que funcione bien con la DatesWithSlashesclase.

Articulos interesantes...