"Neil Cerutti" <[EMAIL PROTECTED]> writes: > You cannot access a class's class variables in it's class-statement > scope, since the name of the type is not bound until after the class > statement is completed.
But they are still available as locals, so you can access them using their names, like this: >>> class C: ... a = 1 ... b = 2 ... print a+b ... 3 The question is, why doesn't the OP's code snippet work? It seems that the generator expression can't read the surrounding locals(). But when you change the generator expression to a list comprehension using a pair of [] around it, it starts working. Compare: class C(object): d = {} for a in 1, 2, 3: ignore = list((a, b) for b in (4, 5, 6)) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in C File "<stdin>", line 4, in <genexpr> NameError: global name 'a' is not defined with: class C(object): d = {} for a in 1, 2, 3: ignore = [(a, b) for b in (4, 5, 6)] It seems that generator expressions and list comprehensions have subtly different scoping rules. Whether this is a bug or not is a good question. -- http://mail.python.org/mailman/listinfo/python-list