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._ageUsa la proprietà come un normale attributo:
person = Person("Alice", 30)
print(person.age)Output:
30Nota 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 = valueOra 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 negativaOutput:
31Crea 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 = 15Output:
15Punto 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.
Sfida
MedioCompleta 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°FProvalo 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 primaQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti di OOP
File esterniIntroduzione a OOPClassi vs. oggettiIl parametro selfMetodiAttributiMetodo costruttore (__init__)Riepilogo - Calcolatrice semplice4Ereditarietà
Ereditarietà di baseLa funzione super()Sovrascrittura dei metodiEreditarietà multiplaOrdine di risoluzione dei metodiRiepilogo - Gerarchia dei dipendenti7Metodi speciali
Introduzione ai metodi magiciSovraccarico degli operatoriMetodi magici dei contenitoriRiepilogo - Lista personalizzata10Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneModello SingletonModello FactoryModello ObserverModello Strategy2Decoratori
Introduzione ai decoratoriDecoratore di proprietàDecoratore di metodo staticoDecoratore di metodo di classe5Polimorfismo
Ripasso dell'override dei metodiDuck typingClassi e metodi astrattiProgettazione delle interfacceRiepilogo - Calcolatore di forme8Concetti avanzati di OOP
Composizione vs ereditarietàMixinMetodi statici e di classeDecorator di classeContext manager11Pattern di progettazione - Parte 2
Pattern dei comandiPattern adattatorePattern decoratorePattern metodo templatePattern statoPattern composito3Proprietà delle classi
Variabili di istanza e di classeDecorator delle proprietàAttributi privatiRiepilogo - Gestore di conti bancari6Incapsulamento
Membri pubblici, protetti e privatiModificatori di accessoOccultamento delle informazioniDecorator delle proprietà: avanzatiRipasso - Sistema di registri degli studenti12Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e UtenteSistema di prestitoFunzionalità di ricercaInterfaccia amministratoreTest e integrazioneEsercitati da solo: Compilatore Python online