Sobes.tech
Junior — Middle

Qual é a diferença entre classmethod e staticmethod em Python?

sobes.tech IA

Resposta da IA

classmethod e staticmethod são dois tipos de métodos em Python que diferem na forma como acedem à classe e aos seus dados.

  • @classmethod — método que recebe como primeiro argumento a própria classe (cls), em vez de uma instância. Isto permite que o método trabalhe com a classe, altere o seu estado ou crie novas instâncias.

  • @staticmethod — método que não recebe automaticamente nem uma instância (self) nem uma classe (cls). É uma função normal que está logicamente relacionada com a classe, mas não depende do seu estado.

Exemplo:

class MyClass:
    count = 0

    def __init__(self):
        MyClass.count += 1

    @classmethod
    def get_count(cls):
        return cls.count

    @staticmethod
    def greet(name):
        return f"Hello, {name}!"

obj = MyClass()
print(MyClass.get_count())  # Mostra o número de objetos criados
print(MyClass.greet('Alice'))  # Mostra uma saudação

Resumo:

  • classmethod pode modificar ou usar o estado da classe.
  • staticmethod é simplesmente uma função dentro da classe, que não depende da classe nem de uma instância.