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 ** 2Nota 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.53975Nota 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 getterOutput:
10Punto 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.
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
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