List-type attributes and name strings

Chris Rebert clp2 at rebertia.com
Thu Jul 1 07:02:49 EDT 2010


On Thu, Jul 1, 2010 at 3:56 AM, egbert <egbertum at xs4all.nl> wrote:
> Normally you use setattr() if the name of the attribute is in a
> namestring:
>>>>> setattr(self, namestring, value)
> But my attributes are lists or dictionaries, and I don't seem to be
> able to use setattr anymore.

Because you're not setting an attribute anymore, you're mutating an
existing dict/list object (that just so happens to be the attribute of
another object).

> Now I use for a list something like:
>>>> self.__dict__[namestring].append(value)

getattr(self, namestring).append(value)

> and for a dictionary:
>>>> self.__dict__[namestring][keystring]=value

getattr(self, namestring)[keystring] = value

> But I have the impression that I am cheating, because users should not
> operate on __dict__ directly.
> Is that true ? And are there better solutions ?

Yes and yes. See above. When dealing with nested stuff (e.g x.y[z]),
switch to getattr() as demonstrated above.

Cheers,
Chris
--
http://blog.rebertia.com



More information about the Python-list mailing list