1
resposta

[Dúvida] @Property ou @classmethod (Python)

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?

1 resposta

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!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.