Python staticmethod ()

A função interna staticmethod () retorna um método estático para uma determinada função.

A sintaxe de staticmethod()é:

 método estático (função)

Usar staticmethod()é considerado uma forma não Pythônica de criar uma função estática.

Portanto, em versões mais recentes do Python, você pode usar o @staticmethoddecorador.

A sintaxe de @staticmethodé:

 @staticmethod def func (args,…)

Parâmetros staticmethod ()

O staticmethod()método usa um único parâmetro:

  • função - função que precisa ser convertida em um método estático

Valor de retorno de staticmethod ()

O staticmethod()retorna um método estático para uma função passada como parâmetro.

O que é um método estático?

Os métodos estáticos, assim como os métodos de classe, são métodos vinculados a uma classe e não a seu objeto.

Eles não requerem a criação de uma instância de classe. Portanto, eles não dependem do estado do objeto.

A diferença entre um método estático e um método de classe é:

  • O método estático não sabe nada sobre a classe e apenas lida com os parâmetros.
  • O método de classe funciona com a classe, pois seu parâmetro é sempre a própria classe.

Eles podem ser chamados tanto pela classe quanto por seu objeto.

 Class.staticmethodFunc () ou mesmo Class (). StaticmethodFunc ()

Exemplo 1: criar um 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))

Resultado

 A soma é: 15 

Quando você usa métodos estáticos?

1. Agrupando a função de utilidade a uma classe

Os métodos estáticos têm um caso de uso limitado porque, como os métodos de classe ou quaisquer outros métodos dentro de uma classe, eles não podem acessar as propriedades da própria classe.

No entanto, quando você precisa de uma função de utilidade que não acessa nenhuma propriedade de uma classe, mas faz sentido que pertence à classe, usamos funções estáticas.

Exemplo 2: crie uma função de utilidade como um 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")

Resultado

 Igual

Aqui, temos uma Datesaula que só funciona com datas com travessões. No entanto, em nosso banco de dados anterior, todas as datas estavam presentes em barras.

Para converter as datas das barras em datas dos traços, criamos uma função de utilidade toDashDatedentro Dates.

É um método estático porque não precisa acessar nenhuma propriedade de Datessi mesmo e requer apenas os parâmetros.

Também podemos criar toDashDatefora da classe, mas como funciona apenas para datas, é lógico mantê-lo dentro da Datesclasse.

2. Ter uma única implementação

Os métodos estáticos são usados ​​quando não queremos que as subclasses de uma classe alterem / substituam uma implementação específica de um método.

Exemplo 3: Como funciona a herança com o 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")

Resultado

 Igual

Aqui, não queremos que a subclasse DatesWithSlashessubstitua o método do utilitário estático toDashDateporque ele só tem um único uso, ou seja, altere a data para datas-traço.

Poderíamos facilmente usar o método estático em nossa vantagem, substituindo o getDate()método na subclasse para que funcione bem com a DatesWithSlashesclasse.

Artigos interessantes...