From parsing a class to code object to class to mappingproxy to object (oh my!)

Gregory Ewing greg.ewing at canterbury.ac.nz
Fri Apr 5 18:54:24 EDT 2019


adam.preble at gmail.com wrote:
> Something I
> don't really understand from a code generation perspective is the switch over
> to STORE_NAME for class methods.

That's because, in this particular situation, the locals are
being kept in a dict instead of an array.

When compiling an ordinary function, the compiler figures out
what locals there are, and generates LOAD_FAST and STORE_FAST
opcodes to access them by index.

But when compiling a class body, it uses a dict to hold the
locals, and generates LOAD_NAME and STORE_NAME opcodes to
access it.

These opcodes actually date from very early versions of
Python, when locals were always kept in a dict. When
optimised locals were introduced, the old mechanism was kept
around for building class dicts. (There used to be one or
two other uses, but I think classes are the only one left
now.)

-- 
Greg


More information about the Python-list mailing list