Hallo Kurt,
PS: Python hat auch __getattribute__, aber ich vermute das geht auf Instanzvariablen während Items Klassenvariablen sein sollen !(?)
Die Methoden __getitem__, __setitem__ und __delitem__ sind für die Emulierung von Datenstrukturzugriff wie bei Listen, Tupeln oder Dictionaries da, d.h. dings[key]. Man kann damit einfach klassische Datenstrukturen nach außen hin uniform gestalten, während die Implementierung wie auch immer sein kann.
__getattribute__, __getattr__*, setattr__, __delattr__ dagegen sind für Attribute eines Objektes da, d.h. dings.key wird also zu dings.__getattribute__(key). __getattr__ im Gegensatz zu __getattribute__ wird erst nach dem Suchen im Objekt und in der Vererbungshierarchie aufgerufen, ist also vergleichbar mit Rubys method_missing. Das kann manchmal ganz praktisch sein, wenn der Methodenname irgendwohin weiter gereicht wird, das Objekt also ein Proxy ist. Z.b. in XML-RPC oder in diesem zufällig aus Google gefischten Flickr-API-Client.
Tim
Nach self das Nervigste an Python: Die __Unterstriche__!