Qual é a diferença entre o uso de métodos declarados como static e class em Python?
sobes.tech IA
Resposta da IA
Em Python, os métodos declarados como @staticmethod e @classmethod diferem na forma como acedem aos dados da classe e da instância:
-
@staticmethod — é um método que não recebe automaticamente nem uma referência à instância (
self) nem à classe (cls). Comporta-se como uma função normal, mas está dentro da classe para agrupamento lógico. Não pode modificar o estado da classe ou da instância. -
@classmethod — é um método que recebe como primeiro argumento a própria classe (
cls), em vez de uma instância. Permite trabalhar com os atributos da classe, criar construtores alternativos e modificar o estado da classe.
Exemplo:
class MyClass:
count = 0
@staticmethod
def greet():
print("Olá!")
@classmethod
def increment_count(cls):
cls.count += 1
MyClass.greet() # Vai imprimir: Olá!
MyClass.increment_count()
print(MyClass.count) # Vai imprimir: 1
Assim, staticmethod é simplesmente uma função dentro da classe, enquanto classmethod é um método que trabalha com a própria classe.