Sto passando da Java a Python e sto avendo problemi a capire il decoratore @Property
. Ho realizzato in linguaggi OOP (come Java) non capisco appieno il punto dei metodi mutator nel senso seguente:
Supponiamo di avere una variabile privata x
. Quindi dobbiamo creare un metodo mutatore
public void setX(int val) {
x = val;
}
Ora se x
era stato public
allora avremmo potuto fare solo x = val
e sarebbe stato più semplice e non ci sarebbe stata alcuna differenza. Ora, in uno scenario più complicato, potremmo aggiungere restrizioni, forse non ha senso che x sia inferiore a 10
public void setX(int val) {
if(x < 10)
x = 10;
else
x = val;
}
Quindi in un certo senso è il punto di avere metodi mutator per imporre restrizioni sui dati? Quindi è per ottenere l'incapsulamento? Ci sto pensando perché con @Property
di Python (correggimi se ho torto) non stai chiamando un metodo mutatore ma in effetti funziona allo stesso modo, nel senso che può avvenire una logica addizionale prima che il valore venga cambiato.
Una domanda corollaria è, se abbiamo un semplice metodo di mutatore come nel primo esempio, la variabile dovrebbe essere resa pubblica?