Automatic binding of **kwargs to variables

Steven D'Aprano steve at REMOVETHIScyber.com.au
Sun Oct 30 13:31:53 CET 2005


On Sat, 29 Oct 2005 11:01:02 -0700, chris.atlee at gmail.com wrote:

> Mike Meyer wrote:
> [snip]
>>    for name, value in kwargs.items():
>>        if name in ('a', 'list', 'of', 'valid', 'keywords'):
>>           exec "%s = %s" % (name, value)
>>        else:
>>           raise ValueError, "Unrecognized keyword " + name
>>
>> Others will probably tell you that you really shouldn't be using exec.
> 
> What about using setattr?
> 
>     for name, value in kwargs.items():
>         if name in ('a', 'list', 'of', 'valid', 'keywords'):
>            setattr(self, name, value)
>         else:
>            raise ValueError, "Unrecognized keyword " + name
> 
> I'd probably turn the list of valid keywords into another dictionary to
> make it easy to specify default values for all the parameters as well.

Here's a thought... instead of passing a class instance which you access
with obj.name, why not pass a dict which you access with dict[name]?

I don't understand the purpose of doing all this extra work to stuff
values stored in a dictionary into instance attributes, when it is so easy
to just use the dictionary. What advantage do you get?



-- 
Steven.




More information about the Python-list mailing list