I have started to learn python and writing a practice app. The directory structure looks like
src
|
--ShutterDeck
|
--Helper
|
--User.py -> class User
--Controller
|
--User.py -> class User
The src
directory is in PYTHONPATH
. In a different file, lets say main.py
, I want to access both User
classes. How can I do it.
I tried using the following but it fails:
import cherrypy
from ShutterDeck.Controller import User
from ShutterDeck.Helper import User
class Root:
@cherrypy.expose
def index(self):
return 'Hello World'
u1=User.User()
u2=User.User()
That's certainly ambiguous. The other (c++ way of doing it) way that I can think of is
import cherrypy
from ShutterDeck import Controller
from ShutterDeck import Helper
class Root:
@cherrypy.expose
def index(self):
return 'Hello World'
u1=Controller.User.User()
u2=Helper.User.User()
But when above script is run, it gives the following error
u1=Controller.User.User()
AttributeError: 'module' object has no attribute 'User'
I'm not able to figure out why is it erroring out? The directories ShutterDeck
, Helper
and Controller
have __init__.py
in them.
You want to import the
User
modules in the package__init__.py
files to make them available as attributes.So in both
Helper/__init_.py
andController/__init__.py
add:This makes the module an attribute of the package and you can now refer to it as such.
Alternatively, you'd have to import the modules themselves in full:
so refer to them with their full names.
Another option is to rename the imported name with
as
:This might also help (struggled with similar problem today):
in
ShutterDeck/{Controller,Helper}/__init__.py
:And then:
One way is just:
You can also do this: