Decoradores de Propriedade
Parte da seção Programação Orientada a Objetos do Journey de Python da Coddy. Lição 14 de 64.
Os 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: Age cannot be negativeSaída:
31Crie propriedades calculadas 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: os decoradores de propriedades fazem com que os métodos pareçam atributos. Use @property para getters e @attribute_name.setter para setters. Isso permite a validação de dados e 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. Em seguida, 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 Celsius exatamente como foi fornecido e o valor 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 pela instância real de Temperature
# TODO: Imprima os valores em Celsius e Fahrenheit
# TODO: Use o formato: "25.0°C is 77.0°F"
# TODO: Defina a temperatura para 98.6°F
# TODO: Imprima ambos os 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