Menu
Coddy logo textTech

Decorator delle proprietà

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

I decoratori di proprietà ti permettono di controllare come si accede agli attributi e come vengono modificati, mantenendo la semplice sintassi degli attributi.

Ecco un esempio di classe con un getter di proprietà:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age

Usa la proprietà come un normale attributo:

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

Output:

30

Nota che accedi a age senza parentesi, anche se in realtà stai chiamando un metodo.

Aggiungi un setter per convalidare i dati quando imposti i valori:

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

Ora puoi impostare l’età con la convalida automatica:

person = Person("Alice", 30)
person.age = 31     # Usa il setter con validazione
print(person.age)   # Usa il getter

# Questo genererebbe un errore:
# person.age = -5   # ValueError: l'età non può essere negativa

Output:

31

Crea proprietà calcolate che calcolano valori:

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)  # Calcola 5 * 3 = 15

Output:

15

Punto chiave: i decoratori delle proprietà fanno apparire i metodi come attributi. Usa @property per i getter e @attribute_name.setter per i setter. Questo consente la convalida dei dati e i valori calcolati, mantenendo una sintassi semplice per accedere agli attributi.

challenge icon

Sfida

Medio

Completa la classe Temperature in temperature.py che converte tra Celsius e Fahrenheit. Poi usa questa classe in driver.py per testare le conversioni di temperatura. Segui i commenti TODO in entrambi i file per le istruzioni passo passo.

Stampa ogni conversione come [celsius]°C is [fahrenheit]°F, con il valore Celsius esattamente com'è stato fornito e il valore Fahrenheit così come viene calcolato da Python. Non arrotondare né formattare i numeri. Le due righe prodotte dal driver sono:

25°C is 77.0°F
37.0°C is 98.6°F

Provalo tu

# TODO: Importa la classe Temperature dal modulo temperature

# Verifica la classe:
# TODO: Crea un'istanza di temperatura a 25°C
temp = None  # Sostituisci con un'istanza effettiva di Temperature

# TODO: Stampa i valori in Celsius e Fahrenheit
# TODO: Usa il formato: "25.0°C is 77.0°F"

# TODO: Imposta la temperatura a 98.6°F

# TODO: Stampa di nuovo entrambi i valori per verificare che la conversione funzioni
# TODO: Usa lo stesso formato di prima
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