optparse

Steven Bethard steven.bethard at gmail.com
Wed May 11 16:49:00 EDT 2005


Sébastien Boisgérault wrote:
> Steven Bethard wrote:
> 
>>Sébastien Boisgérault wrote:
>>
>>>Any idea why the 'options' object in
>>>
>>># optparse stuff
>>>(options, args) = parser.parse_args()
>>>
>>>is not/couldn't be a real dict ? Or why at least it
>>>does not support dict's usual methods ?
>>
>>Well, it's not a real dict because the original API intends it to be
>>used as object attributes.
> 
> Sure ;). But what are the pros of this choice ? The option __str__
> mimicks the behavior of a dict. Why not a full interface support
> of it ?

Well one reason might be that it's easy to convert from an object's 
attributes to a dict, while it's hard to go the other direction:

py> options.x, options.y
('spam', 42)
py> vars(options) # convert to dict
{'y': 42, 'x': 'spam'}

versus

py> options['x'], options['y']
('spam', 42)
py> o = ??? # convert to object???
...
py> o.x, o.y
('spam', 42)

Though I had been working on a namespace module[1] with Nick Coghlan and 
Carlos Ribeiro that provided such behavior:

py> options['x'], options['y']
('spam', 42)
py> o = namespace.Namespace(options)
py> o
Namespace(x='spam', y=42)
py> o.x, o.y
('spam', 42)

However, the namespace module is not part of the Python stdlib, so by 
providing an object with attributes instead of a dict, optparse supports 
(using only builtin functions) both users that want an object with 
attributes and users that want a dict.

STeVe

[1] http://namespace.python-hosting.com/



More information about the Python-list mailing list