Hi,

I just stumbled over this:

  >>> A = 1
  >>> def foo(x):
  ...     A = x
  ...     class X:
  ...         a = A
  ...     return X
  ...
  >>> foo(2).a
  2
  >>> def foo(x):
  ...     A = x
  ...     class X:
  ...         A = A
  ...     return X
  ...
  >>> foo(2).A
  1

Works that way in Py2.7 and Py3.3.

I couldn't find any documentation on this, but my *guess* about the reasoning is that the second case contains an assignment to A inside of the class namespace, and assignments make a variable local to a scope, in this case, the function scope. Therefore, the A on the rhs is looked up in that scope as well. However, this is just a totally hand waving guess.

Does anyone have a better explanation or know of a place where this specific behaviour is documented?

Stefan

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to