Diez B. Roggisch <deets <at> nospam.web.de> writes: > > def ext_setattr(obj, attr, val): > > for subattr in attr.split("."): > > obj = getattr(obj, subattr) > > obj = val > > > >>>> import test > >>>> a = A() > > Traceback (most recent call last): > > File "<stdin>", line 1, in <module> > > NameError: name 'A' is not defined > >>>> a = test.A() > >>>> a.B.C.txt > > 'foo' > >>>> ext_setattr(a, 'B.C.txt', 'bar') > >>>> a.B.C.txt > > 'foo' > > > > What am i doing wrong? > > obj = val won't work.
Why is this so? Shouldn't it be the same? > You need to use a setattr(obj, name, val) > on the last attribute-name. Ok, so this works: def ext_setattr(obj, attr, val): attributes = attr.split('.') for subattr in attributes[:-1]: obj = getattr(obj, subattr) setattr(obj, attributes[-1], val) -- http://mail.python.org/mailman/listinfo/python-list