We all know that doing from foo import * in python is not good. Here's a specific instance I recently ran into which demonstrates how this can cause problems.
I was cleaning up some code, and decided to organize a decently sized list of imports (as outlined in the PEP8 style guide). To my surprise, simply changing the order of the imports broke the code. Scanning through the list, I spotted a from foo import * statement, which turned out to be causing problems.
Here's the setup:
File foo.py:
1 2 | import datetime # do some stuff |
File bar.py:
1 2 3 4 | from datetime import datetime from foo import * # do some stuff something = datetime.now() # code breaks here |
When bar.py runs, an exception is thrown on line #4. What's happening is that the from foo import * statement is importing its datetime module, which is overriding the datetime class imported a line above. This means when you use datetime, you're actually using the module and not the class, as expected.