Python module and object names clash
Question: Please consider the following Python modules excerpts:

foo.py:

    
    
    class Foo:
      (...)
    

bar.py:

    
    
    import foo
    
    foo = foo.Foo()
    

The variable foo, which was a module object, is overwritten with a Foo object.

I know that I can use other names for the object, e.g.:

    
    
    foobar = foo.Foo()
    

but semantically it makes more sense in my code to have it called foo, since
it will be the only instance.

(I tried to workaround this by dropping classes and using modules only, but I
went back to using classes because using modules only had "robustness"
problems.)

This is kind of a philosophical question, but what is the "right" way of
handling this potential object/module names clash?


Answer: In my opinion there is nothing wrong with what you are currently doing, but to
make it more clear for everyone reading the code I would suggest changing your
code to something like the following:

    
    
    import foo as foo_mod
    
    foo = foo_mod.Foo()
    

Or alternatively:

    
    
    from foo import Foo
    
    foo = Foo()
    

This prevents the name clash so it will be more obvious that the variable
`foo` in your module is not going to refer to the module of the same name.

