I've seen this pattern a lot at a past employer, and despite the obvious
convenience I've come to see it as an anti-pattern: for people expecting
Python semantics it's quite surprising to read code that writes foo.bar and
then reads back foo['bar']. We should not try to import JavaScript's object
model into Python.

On Tue, Apr 14, 2020 at 8:06 PM Raymond Hettinger <
raymond.hettin...@gmail.com> wrote:

> SimpleNamespace() is really good at giving attribute style-access. I would
> like to make that functionality available to the JSON module (or just about
> anything else that accepts a custom dict) by adding the magic methods for
> mappings so that this works:
>
>      catalog = json.load(f, object_hook=SimpleNamespace)
>
>  print(catalog['clothing']['mens']['shoes']['extra_wide']['quantity'])
> # currently possible with dict()
>      print(catalog.clothing.mens.shoes.extra_wide.quantity])
>    # proposed with SimpleNamespace()
>      print(catalog.clothing.boys['3t'].tops.quantity
>              # would also be supported
>
> I've already seen something like this in production; however, people are
> having to write custom subclasses to do it.  This is kind of bummer because
> the custom subclasses are a pain to write, are non-standard, and are
> generally somewhat slow.  I would like to see a high-quality version this
> made more broadly available.
>
> The core idea is keep the simple attribute access but make it easier to
> load data programmatically:
>
>     >>> ns = SimpleNamespace(roses='red', violets='blue')
>     >>> thing = input()
>     sugar
>     >>> quality = input()
>     sweet
>     >>> setattr(ns, thing, quality)            # current
>     >>> ns['sugar'] = 'sweet'                   # proposed
>
> If the PEP 584 __ior__ method were supported, updating a SimpleNamespace
> would be much cleaner:
>
>       ns |= some_dict
>
> I posted an issue on the tracker: https://bugs.python.org/issue40284 .
> There was a suggestion to create a different type for this, but I don't see
> the point in substantially duplicating everything SimpleNamespace already
> does just so we can add some supporting dunder methods.   Please add more
> commentary so we can figure-out the best way to offer this powerful
> functionality.
>
>
> Raymond
>
>
> _______________________________________________
> Python-Dev mailing list -- python-dev@python.org
> To unsubscribe send an email to python-dev-le...@python.org
> https://mail.python.org/mailman3/lists/python-dev.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-dev@python.org/message/JOMND56PJGRN7FQQLLCWONE5Z7R2EKXW/
> Code of Conduct: http://python.org/psf/codeofconduct/
>


-- 
--Guido van Rossum (python.org/~guido)
*Pronouns: he/him **(why is my pronoun here?)*
<http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-change-the-world/>
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/EJ6XJW6SZ23V2RJTSPPYT4Z3FB7BMQGO/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to