Olá! Tudo bem? Poderia me ajudar a entender melhor o "@property", por favor?
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!
Olá! Tudo bem? Poderia me ajudar a entender melhor o "@property", por favor?
Olá João! Tudo bem?
Claro, vou te ajudar a entender o @property no Python. O @property é um decorador que permite que você trate métodos de uma classe como se fossem atributos. Isso é útil quando você quer controlar o acesso a um atributo, por exemplo, para validar ou modificar o valor antes de retornar.
Vamos a um exemplo prático:
Imagine que você tem uma classe Cachorro e quer controlar a idade do cachorro para que ela nunca seja negativa. Você pode usar o @property para isso:
class Cachorro:
def __init__(self, nome, idade):
self.nome = nome
self._idade = idade # Note o underline, indicando que é "protegido"
@property
def idade(self):
return self._idade
@idade.setter
def idade(self, valor):
if valor >= 0:
self._idade = valor
else:
raise ValueError("A idade não pode ser negativa")
# Uso
meu_cachorro = Cachorro("Rex", 5)
print(meu_cachorro.idade) # Acessa como um atributo
meu_cachorro.idade = 3 # Modifica usando o setter
print(meu_cachorro.idade)
# meu_cachorro.idade = -1 # Isso lançaria um ValueError
No exemplo acima, @property permite que você acesse idade como se fosse um atributo, mas na verdade está chamando o método idade(). O @idade.setter é usado para definir o comportamento ao tentar modificar idade.
Espero que isso ajude a esclarecer como o @property funciona e como ele pode ser útil para encapsular a lógica de acesso a atributos.
Bons estudos!