Middle
Como são implementados os métodos de classe em Python?
sobes.tech IA
Resposta da IA
Em Python, os métodos de classe são implementados como funções definidas dentro da definição da classe. Eles tomam como primeiro argumento uma instância da classe (geralmente chamada de self), o que lhes permite aceder e modificar os atributos dessa instância. Existem também métodos de classe, relacionados com a própria classe (cls), e métodos estáticos, que não estão ligados nem à instância nem à classe.
class MyClass:
def __init__(self, value):
# Método de inicialização (construtor)
self.value = value
def instance_method(self):
# Método de instância normal
print(f"Valor da instância: {self.value}")
@classmethod
def class_method(cls, new_value):
# Método de classe, aceita como primeiro argumento a própria classe
print(f"Criando uma nova instância com método de classe")
return cls(new_value * 2) # Pode usar cls para criar novas instâncias
@staticmethod
def static_method(x, y):
# Método estático, não ligado nem à instância nem à classe
print("Chamada de método estático")
return x + y
| Tipo de método | Primeiro argumento | Acesso aos atributos da instância | Acesso aos atributos da classe | Decorador |
|---|---|---|---|---|
| Método de instância | self |
Sim | Sim (através de self.__class__) |
Não |
| Método de classe | cls |
Não (apenas através da instância) | Sim | @classmethod |
| Método estático | Nenhum | Não | Não | @staticmethod |
A chamada dos métodos é feita assim:
obj = MyClass(10)
# Chamada do método de instância
obj.instance_method() # Saída: Valor da instância: 10
# Chamada do método de classe
new_obj = MyClass.class_method(5) # Saída: Criando uma nova instância com método de classe
print(new_obj.value) # Saída: 10
# Chamada do método estático
result = MyClass.static_method(2, 3) # Saída: Chamada de método estático
print(result) # Saída: 5