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.
Experimente 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árioSistema de EmpréstimosFuncionalidade de BuscaInterface AdministrativaTestes e IntegraçãoPratique por conta própria: Compilador de Python online