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/