[Python-de] obj.xyz <> obj['xyz']

Andreas Jung lists at andreas-jung.com
Fr Dez 21 13:41:33 UTC 2007



--On 21. Dezember 2007 14:01:35 +0100 "Roland M. Kruggel" 
<rk.liste at bbf7.de> wrote:

> hallo liste,
>
> ich habe folgenden classe geschrieben
>
> <code>
> class Ob(object):
>     def __init__(self, dic):
>         for i in dic.keys():
>             setattr(self, i , dic[i])
>     def __repr__(self):
>         return str(self.__dict__)
>     def __getitem__(self, key):
>         return self.__dict__.get(key,None)
>     def __setitem__(self, key, value):
>         setattr(self, key, value)
>     def __delitem__(self, key):
>         del self.__dict__[key]
>     def __len__(self):
>         return len(self.__dict__)
>     def __iter__(self):
>         return self.__dict__.iterkeys()
>     def keys(self):
>         return self.__dict__.keys()
>     def has_key(self, key):
>         return self.__dict__.has_key(key)
> </code>
>
> aufrufen tue ich das ganze mit
> xy = Ob({'aa':'a1', 'bb':'b1'})
>
> ich kann somit xy['aa'] nutzen als auch xy.aa. Es funktioniert auch.
>
> aber:
> Wenn ich auf eine undefinierte variable zugreife "xy['undef']" bekomme
> ich, wie gewollt, ein None zurĂŒck. Jedoch ein "xx.undef" erzeugt den
> fehler
>
> Traceback (most recent call last):
>   File "<string>", line 1, in <string>
> AttributeError: 'Ob' object has no attribute 'undef'
>
> Ein "xx.undef" ruft wohl nicht __getitem__ auf. Wie kann ich das
> lösen?

Dokumentation lesen: __getattr__() wird hier aufgerufen, nicht 
__getitem__().

-aj
-------------- nächster Teil --------------
Ein Dateianhang mit BinÀrdaten wurde abgetrennt...
Dateiname   : nicht verfĂŒgbar
Dateityp    : application/pgp-signature
DateigrĂ¶ĂŸe  : 186 bytes
Beschreibung: nicht verfĂŒgbar
URL         : http://python.net/pipermail/python-de/attachments/20071221/cd01835b/attachment.pgp