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

Roland M. Kruggel rk.liste at bbf7.de
Fr Dez 21 13:01:35 UTC 2007


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?





-- 
cu
 Roland M. Kruggel

mailto:rk.liste at bbf7.de     http:www.bbf7.de
System: Intel, Debian etch, 2.6.21, xfce4, KDE 3.5

------------
Zufallszitat
Wie man sein Kind nicht nennen sollte: 
  Ron Dell