Tutorial sobre o método estático Python: sintaxe e utilização
É possível aceder aos métodos estáticos utilizando diretamente o nome da classe, sem necessidade de criar uma instância da classe. A função static method do Python promove, portanto, uma separação clara entre a lógica da classe e os dados da instância.
Para que serve o método estático Python?
O método estático Python é uma função e um decorador utilizado para identificar métodos que operam independentemente das instâncias da classe. Os decoradores em Python são funções que modificam o comportamento de outros métodos, adicionando funcionalidades antes ou depois da sua execução, sem influenciar o próprio código da função. Ao contrário dos métodos de instância, as funções estáticas não requerem um parâmetro implícito como self para as instâncias.
Este método do Python oferece uma maneira específica de organizar funções dentro de classes que não precisam aceder a dados de instância. Como não estão vinculadas a uma instância, elas não podem modificar o estado de um objeto. São ferramentas úteis dentro da classe, pois servem para realizar tarefas gerais ou fornecer funcionalidades globais. Por exemplo, elas podem conter utilitários, rotinas de conversão ou funções gerais de ajuda que podem ser acessadas sem dados de instância.
Qual é a sintaxe do método estático Python?
Existem duas formas de criar métodos estáticos em Python: utilizar a função staticmethod() ou o decorador @staticmethod.
staticmethod()
Python staticmethod() é uma função incorporada que converte um método de uma classe em estático. O valor de retorno da função staticmethod() é um método estático para a função que é passada como argumento. É escrito da seguinte forma:
class clase:
def staticmethodFunc(x,y):
return x + y
Class.staticmethodFunc = staticmethod(Class.staticmethodFunc)
print('Sum = ', Class.staticmethodFunc(5,7)) # Output: Sum = 12pythonAo passar a função staticmethodFunc(), definida na classe Class, como argumento para staticmethod(), pode aceder ao seu próprio método diretamente através do nome da classe.
@staticmethod
O decorador @staticmethod é um método mais curto e comum para marcar uma função como estática. O decorador é colocado acima do método na definição da classe. Esta é a sua sintaxe:
class Class:
@staticmethod
def staticmethodFunc(x, y):
return x + y
print('Sum = ', Class.staticmethodFunc(5,7)) # Output: Sum = 12pythonO decorador @staticmethod indica ao interpretador que a função definida deve ser tratada como um método estático.
Exemplos de código para usar o método estático Python
Pode utilizar métodos estáticos para diferentes tarefas. Veja os exemplos apresentados a seguir.
Converter unidades
O método estático Python é muito útil para converter 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.pythonNeste exemplo, a classe Converter tem dois métodos estáticos para converter entre horas e minutos. O método hoursToMinutes() converte horas em minutos, enquanto o minutesToHours() converte minutos em horas.
Os métodos estáticos são acedidos utilizando o nome da classe, sem necessidade de criar uma instância da classe. O acesso é feito diretamente através de Converter.hoursToMinutes() ou Converter.minutesToHours(), em que Converter é o nome da classe. O resultado é apresentado utilizando uma f-string, que é um método de formatação de cadeia ou Python string format que permite combinar expressões dentro de uma cadeia de texto.
Funções de ajuda para realizar cálculos matemáticos
O método estático Python também pode ser utilizado para definir funções de ajuda para cálculos secundários da seguinte forma:
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.pythonO código de exemplo mostra a classe Calculator com métodos estáticos para calcular o quadrado e a raiz quadrada de um número. Através do decorador @staticmethod, square() (quadrado) e sqroot() (raiz quadrada) são marcados como métodos estáticos. Sem criar uma instância da classe, é possível aceder aos métodos através do nome da classe. Em seguida, o resultado de Calculator.square() e Calculator.sqroot() é concatenado numa f-string.
Validar entradas
Outra utilização do método estático Python é a validação 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? TruepythonA classe Validator compreende dois métodos estáticos: isInteger() e isDecimal(). Estas funções verificam se uma entrada dada é um número inteiro ou decimal. O método estático do Python isInteger() recebe uma entrada e tenta convertê-la em um número inteiro (int(num)). Se conseguir, retorna True. Caso contrário, obtém-se False se for capturada uma exceção ValueError, o que ocorre quando a validação não é possível.
O método isDecimal() é utilizado para converter a entrada num número decimal (float(num)). Se for bem-sucedido, é devolvido True e, caso contrário, False. Em seguida, são utilizados os métodos estáticos isInteger() e isDecimal() da classe Validator para verificar as entradas "123" e "3.14". Os resultados são verdadeiros para ambas as funções.
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 olleHpythonNeste exemplo, define-se uma classe StringManipulation com um método estático reverseText(). Este método recebe um texto como parâmetro e utiliza a sintaxe de slicing [::-1] para inverter o texto "Hello World!" e devolver o resultado. f4649815b521372b53abd1cf80ba98ab