Raymond Hettinger <raymond.hettin...@gmail.com> added the comment:

There are some sticking points:

* types.SimpleNamespace() sorts attributes, so this would get in the way of 
issue #39058.

* argparse.Namespace() supports a __contains__() method that isn't offered by 
types.SimpleNamespace():

    >>> 'abc' in Namespace(abc=10)
    True

* Argparse is sensitive to start-up time so we mostly want to avoid adding new 
dependencies.  Start-up time recently got worse when the re module added a 
number of dependencies.

* The __repr__ for SimpleNamespace() doesn't round-trip and isn't what we have 
now with Namespace.  That potentially breaks doctests and diverges from 
published examples:

    >>> Namespace(abc=10)
    Namespace(abc=10)
    >>> SimpleNamespace(abc=10)
    namespace(abc=10)

* Ironically, the class name "Namespace" is simpler than "SimpleNamespace" ;-)

* Much of the code in argparse.Namespace() inherits from _AttributeHolder, so 
switching to types.SimpleNamespace() doesn't really save us much code.

Are there any upsides to switching?  Attribute lookup is almost equally fast 
using either approach, so there is no speed benefit:

    $ python3.8 -m timeit -r 11 -s 'from argparse import Namespace as NS' -s 
'args=NS(abc=10)' 'args.abc'
    10000000 loops, best of 11: 32.7 nsec per loop

    $ python3.8 -m timeit -r 11 -s 'from types import SimpleNamespace as NS' -s 
'args=NS(abc=10)' 'args.abc'
    10000000 loops, best of 11: 32.4 nsec per loop

----------
assignee:  -> rhettinger

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue39076>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to