lettura facile

Il decoratore @property in Python

In Python @property è un decoratore che ti permette di definire metodi nella classe che si comportano come attributi.

@property

Questo significa che puoi accedere a un metodo come se fosse un attributo semplice, senza dover usare parentesi. È molto utile per due motivi principali:

  1. Incapsulamento: permette di nascondere e proteggere lo stato di un'istanza.
  2. Controllo dell'accesso: facilita la validazione o il calcolo automatico di un valore ogni volta che un attributo viene accesso o modificato.

A cosa serve? Utilizzare `@property` ti permette di mantenere l'integrità dei dati, soprattutto quando il valore di un attributo dipende da altri stati o deve essere mantenuto dentro certi limiti.Inoltre, ti permette di modificare l'implementazione interna senza cambiare il modo in cui accedi o modifichi gli attributi  dall'esterno.

Vediamo come si usa @property tramite un esempio pratico.

Crea una classe `Circle` che ha un attributo `radius`

class Circle:
    def __init__(self, radius):
        self._radius = radius

    @property
    def area(self):
        return 3.14159 * self._radius ** 2 

Questa classe calcola l'area del cerchio ogni volta che il raggio cambia.

Come puoi notare, nel codice l'attributo è indicato con l'etichetta `_radius` anziche `radius`. Si tratta di una convenzione per indicare che questo attributo è considerato privato e non dovrebbe essere accesso direttamente dall'esterno.

Il decoratore @property prima del metodo `area` ti permette di accedere all'area del cerchio come se fosse un attributo, ma in realtà è un metodo che calcola l'area ogni volta che la richiedi.

Ad esempio, crea un'istanza della classe.

c = Circle(5)

Poi accedi all'attributo `area` dell'istanza

print(c.area) 

78.53975

Python ti restituisce il valore dell'area come se fosse un attributo ma in realtà l'ha calcolato in tempo reale usando il valore dell'attributo `area`.

Quindi, anche se tecnicamente `area` è definito come un metodo nella classe Circle, grazie all'uso del decoratore @property, puoi accedervi come se fosse un attributo.




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin