Decoradores de Propriedade
Parte da seção Object Oriented Programming do Journey de Python da Coddy — lição 14 de 64.
Decoradores de propriedade permitem que você controle como os atributos são acessados e modificados, mantendo a sintaxe simples de atributo.
Aqui está um exemplo de uma classe com um getter de propriedade:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._ageUse a propriedade como um atributo comum:
person = Person("Alice", 30)
print(person.age)Saída:
30Observe que você acessa age sem parênteses, embora esteja, na verdade, chamando um método.
Adicione um setter para validar os dados ao definir valores:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._age
@age.setter
def age(self, value):
if value < 0:
raise ValueError("Age cannot be negative")
self._age = valueAgora você pode definir a idade com validação automática:
person = Person("Alice", 30)
person.age = 31 # Usa o setter com validação
print(person.age) # Usa o getter
# Isso geraria um erro:
# person.age = -5 # ValueError: A idade não pode ser negativaSaída:
31Crie propriedades computadas que calculam valores:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
return self.width * self.height
rect = Rectangle(5, 3)
print(rect.area) # Calcula 5 * 3 = 15Saída:
15Ponto Chave: Decoradores de propriedade fazem com que métodos pareçam atributos. Use @property para getters e @attribute_name.setter para setters. Isso permite a validação de dados e valores computados, mantendo uma sintaxe simples de acesso a atributos.
Desafio
MédioComplete a classe Temperature em temperature.py que converte entre Celsius e Fahrenheit. Em seguida, use esta classe em driver.py para testar conversões de temperatura. Siga os comentários TODO em ambos os arquivos para instruções passo a passo.
Folha de consulta
Decoradores de propriedade permitem que você controle como os atributos são acessados e modificados, mantendo uma sintaxe de atributo simples.
Use @property para métodos getter:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._age
person = Person("Alice", 30)
print(person.age) # Acesso como um atributo, sem parêntesesUse @attribute_name.setter para métodos setter com validação:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._age
@age.setter
def age(self, value):
if value < 0:
raise ValueError("Age cannot be negative")
self._age = value
person = Person("Alice", 30)
person.age = 31 # Usa o setter com validaçãoCrie propriedades computadas que calculam valores:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
return self.width * self.height
rect = Rectangle(5, 3)
print(rect.area) # Calcula 5 * 3 = 15Experimente você mesmo
# TODO: Importar a classe Temperature do módulo temperature
# Testar a classe:
# TODO: Criar uma instância de temperatura a 25°C
temp = None # Substituir pela instância real de Temperature
# TODO: Imprimir os valores em Celsius e Fahrenheit
# TODO: Usar o formato: "25.0°C is 77.0°F"
# TODO: Definir a temperatura para 98.6°F
# TODO: Imprimir ambos os valores novamente para confirmar que a conversão funciona
# TODO: Usar o mesmo formato de antesEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Object Oriented Programming
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosO Parâmetro selfMétodosAtributosMétodo Construtor (__init__)Recapitulação - Calculadora Simples4Herança
Herança BásicaA Função super()Sobrescrita de MétodoHerança MúltiplaOrdem de Resolução de MétodosRecapitulação - Hierarquia de Funcionários7Métodos Especiais
Introdução aos Métodos MágicosSobrecarga de OperadoresMétodos Mágicos de ContêinerRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução a Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão Strategy2Decoradores
Introdução aos DecoradoresDecorador de PropriedadeDecorador de Método EstáticoDecorador de Método de Classe5Polimorfismo
Sobrescrita de Método RevisitadaDuck TypingClasses e Métodos AbstratosDesign de InterfacesRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição vs HerançaMixinsMétodos Estáticos e de ClasseDecoradores de ClasseGerenciadores de Contexto11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Propriedades de Classe
Variáveis de Instância vs de ClasseDecoradores de PropriedadeAtributos PrivadosRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Membros Públicos, Protegidos e PrivadosModificadores de AcessoOcultação de InformaçãoProperty Decorators AvançadosRecapitulação - Sistema de Registro de Alunos12Projeto: Gerenciamento de Biblioteca
Visão Geral do ProjetoClasses Livro e Usuário