Menu
Coddy logo textTech

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._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 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 = 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: A idade não pode ser negativa

Saída:

31

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

Saída:

15

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

challenge icon

Desafio

Médio

Complete 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ênteses

Use @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ção

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

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 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 Object Oriented Programming