Ainda não entendi em qual situações devo usar @classmethod ou @property e qual a finalidade real. Algúem se arrisca a me explicar?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Ainda não entendi em qual situações devo usar @classmethod ou @property e qual a finalidade real. Algúem se arrisca a me explicar?
Olá, João! Como vai?
Um @classmethod é um método que recebe a própria classe como primeiro argumento em vez de uma instância da classe. Isso é útil quando você precisa acessar ou modificar o estado da classe em si, e não de uma instância específica.
Por exemplo, imagine que você tem uma classe Carro e quer criar um método que conte quantos carros foram criados. Você poderia usar um @classmethod para isso:
class Carro:
contador = 0
def __init__(self):
Carro.contador += 1
@classmethod
def total_carros(cls):
return cls.contador
carro1 = Carro()
carro2 = Carro()
print(Carro.total_carros()) # Saída: 2
Nesse exemplo, total_carros é um método da classe que retorna o número total de carros criados.
O @property é usado para definir métodos que podem ser acessados como atributos. Isso é útil para controlar o acesso a atributos de instância, permitindo que você adicione lógica ao obter ou definir um valor, sem mudar a interface pública da classe.
Por exemplo, considere uma classe Retangulo com atributos de largura e altura. Você pode querer calcular a área como uma propriedade:
class Retangulo:
def __init__(self, largura, altura):
self._largura = largura
self._altura = altura
@property
def area(self):
return self._largura * self._altura
retangulo = Retangulo(5, 10)
print(retangulo.area) # Saída: 50
Aqui, area é uma propriedade que calcula a área do retângulo quando acessada, mas é usada como se fosse um atributo comum.
Espero ter ajudado e bons estudos!