Eric Snow <ericsnowcurren...@gmail.com> added the comment:

There is a conversion.  See builtin___build_class__ in Python/bltinmodule.c 
(and the LOAD_BUILD_CLASS target in Python/ceval.c).  Specifically, the 
metaclass (e.g. the builtin type) is instantiated using the namespace from the 
class definition.  The metaclass copies that namespace into a new dict.  So the 
following two bits of code are equivalent:

  # using a class definition

  ns = OrderedDict()

  class Meta(type):
      def __prepare__(*args, **kwargs):
          return ns

  class Spam(metaclass=Meta):
      a = 1
      b = 2
      ns.move_to_end('a')

  # using the metaclass directly

  ns = OrderedDict()
  ns['a'] = 1
  ns['b'] = 2
  ns.move_to_end('a')
  Spam = Meta('Spam', (object,), ns)

In both cases Spam.__dict__ will be a proxy for a new dict copied from ns.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue34320>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to