Sobes.tech
Junior — Middle

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.