[Python-Dev] PEP 520: Ordered Class Definition Namespace (round 3)

Eric Snow ericsnowcurrently at gmail.com
Sat Jun 11 23:01:33 EDT 2016

On Sat, Jun 11, 2016 at 7:51 PM, Émanuel Barry <vgr255 at live.ca> wrote:
>> From: Eric Snow
>>   1. if ``__definition_order__`` is defined in the class body then it
>>      must be a ``tuple`` of identifiers or ``None``; any other value
>>      will result in ``TypeError``
> Why not just any arbitrary iterable, which get converted to a tuple at
> runtime?

An arbitrary iterable does not necessarily infer a definition order.
For example, dict is an iterable but the order is undefined.  Also,
I'd rather favor simplicity for this (most likely) uncommon corner
case of manually setting __definition_order__, particularly at the
start.  If it proves to be a problematic restriction in the future we
can loosen it.

> __slots__ allows any arbitrary iterable:

Yes, but __slots__ is not order-sensitive.

>> is already complete by the time ``definition_order__`` is set, the
> Typo: missing leading underscores in __definition_order__

I'll fix that.

>> Compatibility
>> =============
>> This PEP does not break backward compatibility, except in the case that
>> someone relies *strictly* on ``dict`` as the class definition namespace.
>> This shouldn't be a problem.
> Perhaps add a mention that isinstance(namespace, dict) will still be true,
> so users don't get unnecessarily confused.

Good point.

>> <class>.__dict__ as OrderedDict
>> -------------------------------
> <class> looks weird to me. I tend to use `cls` (although `klass` isn't
> uncommon). `C` might also not be a bad choice.

Yes, that is better.


More information about the Python-Dev mailing list