On Tue, Apr 19, 2016 at 4:06 AM, Chris Angelico <rosuav@gmail.com> wrote:
There have been proposals to have kwargs retain some order (either by having it actually be an OrderedDict, or by changing the native dict type to retain order under fairly restricted circumstances). With that, you could craft the factory function easily.
It may be worth dusting off one of those proposals and seeing if it can move forward.
FYI, PEP 468: "Preserving the order of **kwargs in a function." [1] The PEP exists for exactly the sort of use case being discussed here. In my case it was an alternate enum proposal I was making back when enums were under discussion. Regardless, I'd still like to see the PEP land. It's just a matter of finding time. I'll see if I can get some consensus leading up to and at PyCon next month. The actual implementation for PEP 468 is almost trivial. Now that we have a C-implementation of OrderedDict, it's mostly just a matter of addressing performance concerns [2], particularly those expressed by Guido, or falling back to one of the alternatives discussed in the PEP. Note that a related concept is represented with my work to make the class definition namespace ordered by default. [3] It would allow class decorators to have access to the order in which the class's attributes were defined. -eric [1] https://www.python.org/dev/peps/pep-0468/ [2] https://www.python.org/dev/peps/pep-0468/#performance [3] http://bugs.python.org/issue24254