Una classe può implementare certe operazioni che vengono invocate da
sintassi speciali (come operazioni aritmetiche o subscript e
affettamenti) definendo metodi con speciali
nomenclature. Questo è l'approccio di
Python all'overload degli operatori, permettendo alle classi di
definire il proprio comportamento rispettando altresì gli operatori
del linguaggio. Per esempio, se una classe definisce un metodo
chiamato __getitem__() ed x
è un'istanza di questa
classe, x[i]
equivale a x.__getitem__(i)
. Eccetto dove
menzionato, i tentativi di eseguire un'operazione quando non sono
stati definiti metodi appropriati, sollevano un'eccezione.
Quando si implementa una classe che emula qualsiasi tipo built-in, è importante che l'emulazione sia implementata solo al livello che abbia un senso per l'oggetto che si è preso a modello. Per esempio, alcune sequenze possono funzionare bene per il recupero di elementi individuali, ma l'estrazione di una fetta può non avere senso. (Un esempio di questo è l'interfaccia NodeList nel Document Object Model del W3C.)