Si possono definire i seguenti metodi per personalizzare il significato
di accesso agli attributi (l'uso, l'assegnamento o la cancellazione di
x.name) delle istanze di classe.
| self, name) |
self). Il nome
dell'attributo � name. Questo metodo restituisce il valore
(calcolato) dell'attributo oppure solleva
l'eccezione AttributeError.
Notare che se l'attributo viene individuato mediante il solito meccanismo, la chiamata a __getattr__() non avviene (si tratta di una asimmetria voluta tra __getattr__() e __setattr__()). Questo, allo stesso tempo, succede per ragioni di efficienza e perch� altrimenti __setattr__() non avrebbe nessun modo per accedere agli altri attributi dell'istanza. Poi, almeno per le variabili di istanza, se ne pu� alterare interamente il controllo, non inserendo alcun valore del dizionario degli attributi d'istanza (collocarli invece in un altro oggetto). Vedere pi� avanti il metodo __getattribute__() per come attualmente si ha il controllo assoluto nelle classi di nuovo stile.
| self, name, value) |
Se __setattr__() vuole assegnare un attributo d'istanza, non basta la semplice esecuzione di "self.name = value" -- ci� causer� una chiamata ricorsiva a se stesso. Invece, deve inserire il valore nel dizionario degli attributi d'istanza: ad esempio "self.__dict__[name] = value". Le classi di nuovo stile, piuttosto che accedere al dizionario delle istanze, devono chiamare il metodo della classe base avente lo stesso nome: per esempio, "object.__setattr__(self, name, value)".
| self, name) |