Actually, a concise rule for Python Scope resolution, from Learning Python, 3rd. Ed.. (These rules are specific to variable names, not attributes. If you reference it without a period, these rules apply)
L. Local. (Names assigned in any way within a function (
lambda), and not declared global in that function.
E. Enclosing function locals. (Name in the local scope of any and all enclosing functions (
lambda), form inner to outer.
G. Global (module). Names assigned at the top-level of a module file, or declared global in a
def within the file.
B. Built-in (Python). Names preassigned in the built-in names module :
So, in the case of
code1 class Foo: code2 def spam..... code3 for code4..: code5 x()
The for loop does not have it’s own namespace. It would look in the LEGB order,
L : local, in the current def.
E : Enclosed function, any enclosing functions(if def spam was in another def)
G : Global. Were there any declared globally in the module?
B : Any builtin x() in Python.