[Python-Dev] Preserving the definition order of class namespaces. (original) (raw)

Nick Coghlan ncoghlan at gmail.com
Sun May 24 11:35:13 CEST 2015


On 24 May 2015 at 15:53, Eric Snow <ericsnowcurrently at gmail.com> wrote:

On May 23, 2015 10:47 PM, "Guido van Rossum" <guido at python.org> wrote:

How will definitionorder be set in the case where prepare doesn't return an OrderedDict? Or where a custom metaclass's new calls its superclass's new with a plain dict? (I just wrote some code that does that. :-) I was planning on setting it to None if the order is not available. At the moment that's just a check for OrderedDict.

Is it specifically necessary to save the order by default? Metaclasses would be able to access the ordered namespace in their new method regardless, and for 3.6, I still like the init_subclass hook idea proposed in PEP 487, which includes passing the original namespace to the new hook.

So while I'm sold on the value of making class execution namespaces ordered by default, I'm not yet sold on the idea of remembering that order without opting in to doing so in the metaclass.

If we leave definition_order out for the time being then, for the vast majority of code, the fact that the ephemeral namespace used to evaluate the class body switched from being a basic dictionary to an ordered one would be a hidden implementation detail, rather than making all type objects a little bigger.

Regards, Nick.

-- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia



More information about the Python-Dev mailing list