Okay, that was vague. Think of __init__.py as the package initializer. When you call the package, or any module resident therein, the initializer runs. So basically, any time you call something in the foo namespace, the things in __init__.py are available to the caller.
-- John Goodleaf On Wednesday, August 29, 2012 at 11:20 AM, John Goodleaf wrote: > The __init__.py file marks the contents of the directory as a package. Its > code is executed when you reference the package. > > -- > John Goodleaf > > > On Wednesday, August 29, 2012 at 11:17 AM, Leo Shklovskii wrote: > > > Here's a fun question for the python lovers in the crowd. We ran into some > > unexpected behavior in our code and don't have a good explanation for why > > it > > happens. > > > > We've reduced it down to a super simple test case with three files: > > > > test.py > > -------- > > import foo > > try: > > foo.print_stuff() > > except NameError: > > print 'expected NameError' > > import foo.cars > > foo.print_stuff() # why no NameError? > > > > foo/__init__.py > > --------- > > def print_stuff(): > > print cars.__file__ > > > > foo/cars.py > > --------- > > def honk(): > > pass > > > > Why doesn't the second call to print_stuff() raise a NameError? Why does > > importing something in test.py add it to the foo module's namespace? > > > > -- > > --Leo > > > > > > > >
