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?
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!