Middle
O que é um decorador property e para que é usado em Python?
sobes.tech IA
Resposta da IA
property - é um decorador incorporado no Python que permite definir propriedades de classe que se comportam como atributos ao serem acessados, mas podem ter os seus próprios métodos getter, setter e deleter.
É utilizado para:
- Controlar o acesso aos atributos: Permite realizar validações, transformações de dados ou outras ações ao obter ou definir o valor de um atributo.
- Criar atributos "calculados": O atributo pode não armazenar um valor diretamente, mas calculá-lo em tempo real a cada acesso.
- Transição suave de atributos públicos para métodos de acesso: Pode começar com um atributo público simples e depois adicionar lógica usando
@propertysem alterar o código que usa esse atributo. - Reutilização de lógica getter/setter: Para a mesma propriedade, podem ser definidos getter, setter e deleter. A lógica relacionada a essas operações está centralizada num só lugar.
class MyClass:
def __init__(self, value):
self._value = value # Atributo privado
@property
def value(self): # Getter
"""Devolve o valor."""
print("Acedeu ao valor")
return self._value
@value.setter
def value(self, new_value): # Setter
"""Define um novo valor."""
if not isinstance(new_value, (int, float)):
raise TypeError("O valor deve ser um número")
print(f"A definir valor para {new_value}")
self._value = new_value
@value.deleter
def value(self): # Deleter
"""Remove o valor."""
print("A remover valor")
del self._value
# Exemplo de uso
obj = MyClass(10)
print(obj.value) # Chama o getter
obj.value = 20 # Chama o setter
print(obj.value)
# del obj.value # Chama o deleter - cuidado, pode causar erros se o atributo for usado mais tarde
Sem @property, teria que usar métodos separados get_value(), set_value(), delete_value(), o que é menos conveniente para o acesso aos dados.