Resumo : neste tutorial, você aprenderá sobre os métodos estáticos do Python e como usá-los para criar uma classe de utilitário.
Introdução aos métodos estáticos do Python
Até agora, você aprendeu sobre métodos de instância vinculados a uma instância específica. Isso significa que os métodos de instância podem acessar e modificar o estado do objeto vinculado.
Além disso, você aprendeu sobre métodos de classe vinculados a uma classe. Os métodos de classe podem acessar e modificar o estado da classe.
Ao contrário dos métodos de instância, os métodos estáticos não estão vinculados a um objeto. Em outras palavras, os métodos estáticos não podem acessar e modificar o estado de um objeto.
Além disso, Python não passa implicitamente o cls
parâmetro (ou o self
parâmetro) para métodos estáticos. Portanto, os métodos estáticos não podem acessar e modificar o estado da classe.
Na prática, você usa métodos estáticos para definir métodos utilitários ou funções de grupo que possuem alguns relacionamentos lógicos em uma classe.
Para definir um método estático, você usa o @staticmethod
decorador:
class className:
@staticmethod
def static_method_name(param_list):
pass
Linguagem de código: Python ( python )
Para chamar um método estático, você usa esta sintaxe:
className.static_method_name()
Linguagem de código: Python ( python )
Métodos estáticos Python versus métodos de classe
Como os métodos estáticos são bastante semelhantes aos métodos de classe , você pode usar o seguinte para encontrar as diferenças entre eles:
Métodos de classe | Métodos estáticos |
---|---|
Python passa implicitamente o cls argumento para métodos de classe. |
Python não passa implicitamente o cls argumento para métodos estáticos |
Os métodos de classe podem acessar e modificar o estado da classe. | Os métodos estáticos não podem acessar ou modificar o estado da classe. |
Use @classmethod decoradores para definir métodos de classe |
Use @staticmethod decoradores para definir métodos estáticos. |
Exemplos de métodos estáticos Python
O seguinte define uma classe chamada TemperatureConverter
que possui métodos estáticos para converter temperaturas entre Celsius, Fahrenheit e Kelvin:
class TemperatureConverter:
KEVIN = 'K',
FAHRENHEIT = 'F'
CELSIUS = 'C'
@staticmethod
def celsius_to_fahrenheit(c):
return 9*c/5 + 32
@staticmethod
def fahrenheit_to_celsius(f):
return 5*(f-32)/9
@staticmethod
def celsius_to_kelvin(c):
return c + 273.15
@staticmethod
def kelvin_to_celsius(k):
return k - 273.15
@staticmethod
def fahrenheit_to_kelvin(f):
return 5*(f+459.67)/9
@staticmethod
def kelvin_to_fahrenheit(k):
return 9*k/5 - 459.67
@staticmethod
def format(value, unit):
symbol = ''
if unit == TemperatureConverter.FAHRENHEIT:
symbol = '°F'
elif unit == TemperatureConverter.CELSIUS:
symbol = '°C'
elif unit == TemperatureConverter.KEVIN:
symbol = '°K'
return f'{value}{symbol}'
Linguagem de código: Python ( python )
E para chamar a TemperatureConverter
classe, você usa o seguinte:
f = TemperatureConverter.celsius_to_fahrenheit(35)
print(TemperatureConverter.format(f, TemperatureConverter.FAHRENHEIT))
Linguagem de código: Python ( python )
Resumo
- Use métodos estáticos para definir métodos utilitários ou agrupar funções logicamente relacionadas em uma classe.
- Use o
@staticmethod
decorador para definir um método estático.