Menu
Coddy logo textTech

Decorador de Propriedade

Parte da seção Object Oriented Programming do Journey de Python da Coddy — lição 10 de 64.

O decorador @property permite que você acesse métodos como atributos, proporcionando uma maneira limpa de obter e definir valores.

Aqui está um exemplo de uma classe usando @property:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @property
    def area(self):
        return 3.14159 * self._radius ** 2

Crie um círculo e acesse as propriedades:

my_circle = Circle(5)

Acesse propriedades como atributos comuns:

print(my_circle.radius)
print(my_circle.area)

Saída:

5
78.53975

Observe que você não usa parênteses () ao acessar propriedades - elas se parecem com atributos, mas executam código de método.

Adicione um setter para permitir a alteração de valores:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @radius.setter
    def radius(self, value):
        if value > 0:
            self._radius = value
        else:
            print("Radius must be positive!")

Agora você pode definir o raio como um atributo:

my_circle = Circle(5)
my_circle.radius = 10  # Usa o setter
print(my_circle.radius)  # Usa o getter

Saída:

10

Ponto Chave: @property faz com que métodos pareçam atributos, enquanto @property_name.setter permite que você controle como os valores são atribuídos.

Folha de consulta

O decorador @property permite que você acesse métodos como atributos, fornecendo uma maneira limpa de obter e definir valores.

Uso básico de propriedades:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @property
    def area(self):
        return 3.14159 * self._radius ** 2

Acesse propriedades sem parênteses:

my_circle = Circle(5)
print(my_circle.radius)  # 5
print(my_circle.area)    # 78.53975

Adicione um setter para controlar a atribuição de valores:

@radius.setter
def radius(self, value):
    if value > 0:
        self._radius = value
    else:
        print("Radius must be positive!")

Defina valores como atributos:

my_circle.radius = 10  # Usa o setter
print(my_circle.radius)  # Usa o getter

Experimente você mesmo

Esta lição não inclui um desafio de código.

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