Python is so dynamic that it's not always clear what's going on in a large program, and looking at a tiny bit of source code does not  always help. To make matters worse, editors tend to have poor support for navigating to the definitions of tokens or import statements in a Python file.
One way to compensate might be to write a special profiler that, instead of timing the program, would record the runtime types and paths of objects of the program and expose this data to the editor.
This might be implemented with sys.settrace() which sets a callback for each line of code and is how pdb is implemented, or by using the ast module and an import hook to instrument the code, or is there a better strategy? How would you write something like this without making it impossibly slow, and without runnning afoul of extreme dynamism e.g side affects on property access?
What if you monkey-patched object's class or another prototypical object?
This might not be the easiest if you're not using new-style classes.
What's the best way to record the type of every variable assignment in a Python program?