J'ai commencé à apprendre le python et à écrire une application pratique. La structure du répertoire ressemble à
src
|
--ShutterDeck
|
--Helper
|
--User.py -> class User
--Controller
|
--User.py -> class User
Le répertoire src
est dans PYTHONPATH
. Dans un fichier différent, disons main.py
, je veux accéder aux deux classes User
. Comment puis-je le faire.
J'ai essayé d'utiliser les éléments suivants, mais cela échoue:
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()
C'est certainement ambigu. L’autre façon (c ++ de le faire) à laquelle je peux penser est
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()
Mais quand le script ci-dessus est exécuté, il donne l'erreur suivante
u1=Controller.User.User()
AttributeError: 'module' object has no attribute 'User'
Je ne suis pas capable de comprendre pourquoi c'est une erreur Les répertoires ShutterDeck
, Helper
et Controller
ont __init__.py
en eux.
Vous souhaitez importer les modules User
dans les fichiers du package __init__.py
pour les rendre disponibles en tant qu'attributs.
Donc, dans Helper/__init_.py
et Controller/__init__.py
, ajoutez:
from . import User
Cela fait du module un attribut du paquet et vous pouvez maintenant vous y référer en tant que tel.
Sinon, vous devez importer les modules eux-mêmes dans leur intégralité:
import ShutterDeck.Controller.User
import ShutterDeck.Helper.User
u1=ShutterDeck.Controller.User.User()
u2=ShutterDeck.Helper.User.User()
alors référez-vous à eux avec leurs noms complets.
Une autre option consiste à renommer le nom importé avec as
:
from ShutterDeck.Controller import User as ControllerUser
from ShutterDeck.Helper import User as HelperUser
u1 = ControllerUser.User()
u2 = HelperUser.User()
Une façon est juste:
import ShutterDeck.Controller.User
import ShutterDeck.Helper.User
cuser = ShutterDeck.Controller.User.User()
huser = ShutterDeck.Helper.User.User()
Vous pouvez aussi faire ceci:
from ShutterDeck.Controller.User import User as ControllerUser
from ShutterDeck.Helper.User import User as HelperUser
Cela pourrait aussi aider (aux prises avec un problème similaire aujourd'hui):
ShutterDeck
├── Controller
│ ├── __init__.py
│ └── User.py
├── Helper
│ ├── __init__.py
│ └── User.py
└── __init__.py
dans ShutterDeck/{Controller,Helper}/__init__.py
:
from .User import User
Et alors:
>>> import ShutterDeck.Helper
>>> helperUser = ShutterDeck.Helper.User()
>>> helperUser
<ShutterDeck.Helper.User.User object at 0x1669b90>
>>> import ShutterDeck.Controller
>>> controllerUser = ShutterDeck.Controller.User()
>>> controllerUser
<ShutterDeck.Controller.User.User object at 0x1669c90>