[Tutor] setattr vs __setattr__
Steven D'Aprano
steve at pearwood.info
Tue Sep 7 00:55:28 CEST 2010
On Mon, 6 Sep 2010 09:03:30 pm Rasjid Wilcox wrote:
> I've been using
>
> for attr_name in name_list:
> setattr(a, attr_name, getattr(b, attr_name))
>
> to copy the attributes from one type of class to another, and it is
> not quite as readable as I would like.
The one-liner in the for loop is very concise. The problem is that
concise is often the opposite of readable. So make it less concise:
for name in name_list:
obj = getattr(b, name)
setattr(a, name, obj)
Does that help?
Another alternative, depending on the class, *might* be this:
a.__dict__.update(b.__dict__)
although that's a hack, and like all hacks, may not do what you expect
for all classes.
> Actually, I've just thought
> that the best option would be to make both classes dictionary like
> objects with automatic translation between a['foo'] and a.foo.
How does that help you copy from one class to another? As I see it, it
just adds more noise to the class.
--
Steven D'Aprano
More information about the Tutor
mailing list