Decoradores de Propriedade
Parte da seção Programação Orientada a Objetos do Journey de Python da Coddy. Lição 14 de 64.
Decoradores de propriedade permitem controlar 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 na verdade esteja 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 principal: Decoradores de propriedade fazem com que métodos pareçam atributos. Use @property para getters e @attribute_name.setter para setters. Isso permite validar dados e usar valores calculados, mantendo uma sintaxe simples de acesso a atributos.
Desafio
MédioComplete a classe Temperature em temperature.py, que converte entre Celsius e Fahrenheit. Depois, use essa classe em driver.py para testar as conversões de temperatura. Siga os comentários TODO em ambos os arquivos para obter instruções passo a passo.
Imprima cada conversão como [celsius]°C is [fahrenheit]°F, com o valor em Celsius exatamente como foi fornecido e o valor em Fahrenheit conforme calculado pelo Python. Não arredonde nem formate os números. As duas linhas produzidas pelo driver são:
25°C is 77.0°F
37.0°C is 98.6°FExperimente você mesmo
# TODO: Importe a classe Temperature do módulo temperature
# Teste a classe:
# TODO: Crie uma instância de temperatura a 25°C
temp = None # Substitua por uma instância real de Temperature
# TODO: Imprima os valores em Celsius e Fahrenheit
# TODO: Use o formato: "25°C is 77.0°F" (imprima os dois valores como estão, sem arredondamento ou formatação)
# TODO: Defina a temperatura como 98.6°F
# TODO: Imprima os dois valores novamente para confirmar que a conversão funciona
# TODO: Use 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 Programação Orientada a Objetos
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árioSistema de EmpréstimosFuncionalidade de BuscaInterface AdministrativaTestes e IntegraçãoPratique por conta própria: Compilador de Python online