> From: Eric Snow > Sent: Saturday, June 11, 2016 10:37 PM > To: Python-Dev; Guido van Rossum > Subject: [Python-Dev] PEP 520: Ordered Class Definition Namespace (round > 3)
> The only change to the original proposal > has been that a manually set __definition_order__ must be a tuple of > identifiers or None (rather that using the value as-is). > 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? __slots__ allows any arbitrary iterable: >>> def g(): ... yield "foo" ... yield "bar" ... yield "baz" >>> class C: ... __slots__ = g() >>> C.__slots__ <generator object g at 0x0074A9F0> >>> C.__slots__.gi_running False >>> dir(C) [<snip>, 'bar', 'baz', 'foo'] > Use of a tuple reflects the fact that we are exposing the order in > which attributes on the class were *defined*. Since the definition > is already complete by the time ``definition_order__`` is set, the > content and order of the value won't be changing. Thus we use a type > that communicates that state of immutability. Typo: missing leading underscores in __definition_order__ > 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. > <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. Thanks! -Emanuel _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com