Olá Thiago, tudo bem com você?
O decorator @property corresponde a função property() do python, quando usamos ela como decorator estamos adicionando funcionalidades “especiais” a um método, fazendo ele agir como getters ou setters sem precisar mudar sua sintaxe.
Para usarmos o @property temos que seguir algumas regras.
- Podemos trabalhar com apenas o @property, ou seja apenas com um método que retorna algo (getter).
- Para termos um método do tipo setter, temos que ter declarado antes um método do tipo @property.
Agora analisaremos a classe Livro
, após realizarmos a definição do atributo __nome
como um atributo privado será necessário criarmos os métodos com os decoradores para acessarmos o atributo, como apresentado no código.
Como o nome do método e o nome do atributo são os mesmo, farei a adição de dois prints para informar de onde vem o resultado da nossa operação. O código ficará da seguinte forma.
class Livro:
def __init__(self, nome):
self.__nome = nome
@property
def nome(self):
print("Acessando nome pelo @property")
return self.__nome
@nome.setter
def nome(self, nome):
print("Mudando o nome pelo @nome.setter")
self.__nome = nome
livro1 = Livro("Harry Potter")
print(livro1.nome)
livro1.nome = "Animais fantástico"
print(livro1.nome)
Resultado
Acessando nome pelo @property
Harry Potter
Mudando o nome pelo @nome.setter
Acessando nome pelo @property
Animais fantástico
Note que nesse momento o atributo está sendo acessado pelo método, não diretamente, é imprimido a mensagem Acessando nome pelo @property, mensagem essa presente no método nome
. O mesmo acontece quando utilizamos o método com o decorator @nome.setter.
O uso do decorato @property permite-nos acessarmos um método como um atributo de um objeto. Devido o nome do método e o nome do atributo serem iguais, podemos ter a impressão de que estamos acessando um atributo diretamente.
Para saber um pouco mais sobre o uso dos @property, recomendo a leitura dos seguintes artigos que abordam sobre como utilizar e onde fazer o uso dos @property.
Os artigos acima estão em inglês, caso tenha dificuldade com o idioma recomendo o uso do tradutor do navegador.
Caso tenha dúvidas, encontro à disposição.
Abraços e bons estudos.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!