Ken Newton wrote: > class AttrClass(object): > """AttrClass lets you freely add attributes in nested manner""" > > def __init__(self): > pass > def __setitem__(self, key, value): > return self.__dict__.__setitem__(key, value) > def __repr__(self): > return "%s(%s)" % (self.__class__.__name__, > self.__dict__.__repr__()) > def __str__(self): > ll = ['{'] > for k,v in self.__dict__.iteritems(): > ll.append("%s : %s" % (k, str(v))) > return '\n'.join(ll) + '}' > > def test(): > atr = AttrClass() > atr.first = 1 > atr.second = 2 > atr.third = 'three' > > atrsub = AttrClass() > atrsub.aaa = 'AAA' > atrsub.bbb = 'BBB' > > atr.fourth = atrsub > atr.fifth = 5 > > print atr > print > print repr(atr) > print > print atr.fourth.aaa
Just in case you didn't note: your test() function will run successfully even if you remove the __setitem__() method. Allowing atr["x"] = 42 but not print attr["x"] may puzzle your intended audience. -- http://mail.python.org/mailman/listinfo/python-list