Oltre a ignorare qualsiasi attributo di istanza nell'interesse della correttezza, la ricerca implicita del metodo speciale generalmente ignora anche il metodo
__getattribute__()
anche del metaclasse dell'oggetto.Quali metodi speciali aggirano __getattribute__ in Python?
The docs menzione metodi speciali come __hash__
, __repr__
e __len__
, e so per esperienza che include anche __iter__
per Python 2.7.
Per citare an answer to a related question:
"Magic
__methods__()
vengono trattati in maniera particolare: Essi vengono assegnati internamente a 'slot' nella struttura del tipo di dati per accelerare il loro look-up, e sono solo guardato in questi slot ".
In una ricerca per migliorare la mia risposta a another question, ho bisogno di sapere: quali metodi, in particolare, stiamo parlando?
Quali metodi sono assegnati agli slot? –
Penso che ogni metodo elencato [qui] (http://docs.python.org/reference/datamodel.html#specialnames). Comunque considera che questo si applica solo se chiami il metodo usando "la sua sintassi". Ad esempio, 'a + 5' non chiamerà' __getattribute__', mentre 'a .__ add __ (5)' * lo chiamerà *. Fondamentalmente '__getattribute__' viene chiamato ogni volta che si usa il punto (' .') per accedere a un attributo. – Bakuriu
@Bakuriu: molto informativo, grazie. – porgarmingduod