Menu
Coddy logo textTech

Decoratore di proprietà

Fa parte della sezione Programmazione orientata agli oggetti del percorso Python di Coddy. Lezione 10 di 64.

Il decoratore @property ti permette di accedere ai metodi come se fossero attributi, offrendo un modo chiaro per ottenere e impostare valori. Questo è utile per l’incapsulamento e ti permette di aggiungere logica di convalida o valori calcolati senza modificare l’interfaccia pubblica della tua classe.

Ecco un esempio di classe che usa @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

Nota che usiamo self._radius per memorizzare il valore effettivo. Se usassimo self.radius all’interno del getter, chiamerebbe di nuovo il metodo getter, causando una ricorsione infinita.

Crea un cerchio e accedi alle proprietà:

my_circle = Circle(5)

Accedi alle proprietà come ai normali attributi:

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

Output:

5
78.53975

Nota che non usi le parentesi () quando accedi alle proprietà: sembrano attributi, ma eseguono il codice dei metodi.

Aggiungi un setter per consentire di modificare i valori con convalida:

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!")

Ora puoi impostare il raggio come un attributo:

my_circle = Circle(5)
my_circle.radius = 10  # Utilizza il setter
print(my_circle.radius)  # Utilizza il getter

Output:

10

Punto chiave: @property fa sembrare i metodi degli attributi, mentre @property_name.setter ti consente di controllare come vengono assegnati i valori, permettendo la convalida dei dati e l'incapsulamento.

Provalo tu

Questa lezione non include una sfida di codice.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Python online