adam.pre...@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 -- https://mail.python.org/mailman/listinfo/python-list