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 @staticmethod
decorador.
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 Dates
aula 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 toDashDate
dentro Dates
.
É um método estático porque não precisa acessar nenhuma propriedade de Dates
si mesmo e requer apenas os parâmetros.
Também podemos criar toDashDate
fora da classe, mas como funciona apenas para datas, é lógico mantê-lo dentro da Dates
classe.
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 DatesWithSlashes
substitua o método do utilitário estático toDashDate
porque 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 DatesWithSlashes
classe.