Olá! Tudo bem? Poderia me ajudar a entender melhor o "@property", por favor?
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!