Menu
Coddy logo textTech

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._age

Use a propriedade como um atributo comum:

person = Person("Alice", 30)
print(person.age)

Saída:

30

Observe 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 = value

Agora 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 negative

Saída:

31

Crie 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 = 15

Saída:

15

Ponto-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.

challenge icon

Desafio

Médio

Complete 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°F

Experimente 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 antes
quiz iconTeste seus conhecimentos

Esta 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

Pratique por conta própria: Compilador de Python online