New submission from Ryan Fox: If a variable 'x' exists in the global or local scope, and a function (also defined in the same scope as 'x', or lower) refers only to a member named 'x' of an object, inspect.getclosurevars will include a reference to the variable, rather than the member.
Okay, that's kind of confusing to describe, so here's a small example in code form: import inspect class Foo: x = int() x = 1 f = Foo() assert(f.x != x) func = lambda: f.x == 0 assert(func()) cv = inspect.getclosurevars(func) assert(cv.globals['f'] == f) assert(cv.globals.get('x') != x) # <--- Assertion fails It is expected that 'x' would not exist in cv.globals, since func does not refer to it. Also, there should be a 'f.x' included somewhere in the ClosureVariables object returned. ---------- components: Library (Lib) messages: 261897 nosy: Ryan Fox priority: normal severity: normal status: open title: inspect.getclosurevars returns incorrect variable when using class member with the same name as other variable versions: Python 3.3, Python 3.4, Python 3.5, Python 3.6 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue26577> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com