Tim Tepaße: (PYTHON) Class und __getitem__

Beitrag lesen

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__!