0Pricing
Python Academy · Aula

O decorador @property

Use property para getters, setters e deleters.

O decorador @property é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.

Introdução

@property transforma um método em um atributo legível. @setter e @deleter completam o padrão de acesso controlado.

Por que usar @property?

Em vez do estilo Java getX()/setX(), o Python usa @property. O acesso se parece com o de um atributo: obj.value, não obj.get_value().
class Circle:
    def __init__(self, r): self._r = r
    @property
    def radius(self): return self._r
c = Circle(5)
print(c.radius)  # no ()

Propriedades calculadas

Métodos com @property fazem cálculos sob demanda. obj.area é calculado sempre que é acessado — não é necessário armazenar um valor.
import math
class Circle:
    def __init__(self, r): self._r = r
    @property
    def area(self): return math.pi * self._r**2
c = Circle(5)
print(round(c.area, 2))

Definidor de propriedade

@property_name.setter adiciona um definidor. Agora c.radius = 10 chama o método definidor.
class Circle:
    def __init__(self, r): self._r = r
    @property
    def radius(self): return self._r
    @radius.setter
    def radius(self, val):
        if val <= 0: raise ValueError('radius must be positive')
        self._r = val
c = Circle(5)
c.radius = 10
print(c.radius)

Excluidor de propriedade

@property_name.deleter trata de del obj.attr. Use-o para a lógica de limpeza.
class User:
    def __init__(self, name): self._name = name
    @property
    def name(self): return self._name
    @name.deleter
    def name(self): del self._name
u = User('Alice')
del u.name
print(hasattr(u, '_name'))

Propriedade somente leitura

Defina apenas o getter (sem setter). Tentar atribuir um valor gera AttributeError.
class Const:
    def __init__(self, v): self._v = v
    @property
    def value(self): return self._v
c = Const(42)
print(c.value)
try: c.value = 99
except AttributeError as e: print(e)

Propriedade com validação

Os definidores são o lugar ideal para validar dados — verifique o tipo, o intervalo ou o formato antes de armazená-los.
class BoundedInt:
    def __init__(self, lo, hi): self.lo,self.hi=lo,hi; self._v=lo
    @property
    def value(self): return self._v
    @value.setter
    def value(self, v):
        if not self.lo <= v <= self.hi:
            raise ValueError(f'{v} out of [{self.lo},{self.hi}]')
        self._v = v
b = BoundedInt(0, 10)
b.value = 5
print(b.value)

Armazenamento em cache com property

Combine @property com um valor armazenado em cache para calcular apenas uma vez e memorizar o resultado.
class Expensive:
    _cache = None
    @property
    def result(self):
        if self._cache is None:
            self._cache = sum(range(1000))
        return self._cache
e = Expensive()
print(e.result)
print(e.result)

cached_property (Python 3.8+)

@functools.cached_property calcula a propriedade uma vez e a armazena como um atributo da instância — sem cálculos repetidos.
from functools import cached_property
import math
class Circle:
    def __init__(self, r): self.r = r
    @cached_property
    def area(self): return math.pi * self.r**2
c = Circle(5)
print(round(c.area, 2))

Property vs __slots__

__slots__ impede a criação arbitrária de atributos e economiza memória. Propriedades adicionam lógica. Os dois recursos se complementam.
class Point:
    __slots__ = ('_x', '_y')
    def __init__(self, x, y): self._x,self._y=x,y
    @property
    def x(self): return self._x
p = Point(1, 2)
print(p.x)

Quando usar @property

Use @property quando precisar de validação, valores calculados ou manutenção da compatibilidade com versões anteriores enquanto altera os componentes internos.
# Before: class Person:
#     def __init__(self, age): self.age = age
# After: add validation without changing caller code
class Person:
    def __init__(self, age): self.age = age
    @property
    def age(self): return self._age
    @age.setter
    def age(self, v):
        if v < 0: raise ValueError('negative age')
        self._age = v
p = Person(30)
print(p.age)

Verificação rápida

O que acontece quando você tenta atribuir um valor a uma @property somente leitura (sem setter definido)?

Recapitulação

@property: o getter se torna acesso a um atributo. @name.setter adiciona suporte à escrita. @name.deleter adiciona suporte a del. @cached_property calcula uma vez. Definidores são usados para validação.

Continue

Excelente progresso! Continue para dominar o próximo conceito.

Perguntas Frequentes

A aula “O decorador @property” é grátis?

Sim — o texto completo de “O decorador @property” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.

O que vou aprender em “O decorador @property”?

Use property para getters, setters e deleters. Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Python Academy?

Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “O decorador @property”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Python Academy?

Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Funções como objetos de primeira classe
  2. Escrita de decoradores personalizados
  3. O decorador @property
  4. @classmethod e @staticmethod
← Voltar para Python Academy