Import, comment organiser sa solution
Bonjour, j'ai travaille depuis plusieurs années avec C#/.NET et là je suis sur un gros projet qui va se développer en python (3.5).
Je n'arrive pas à utiliser et organiser ma solution. (notament définir des classe de base ou abstraites dans des fichiers qui seront importés depuis d'autres fichier pour être hérité, etc... ce genre de chose.
Voilà j'aimerais avoir comme arborescence pour mon projet:
De ce que j'ai compris de la doc, à partir du moment où la commande "python3" est exécuté depuis le répertoire racine /src, tout devrait se dérouler sans problème...
Code:
1 2 3 4 5 6 7 8
| /src
- main.py
- common.py
- package_a/
- - common_a.py
- - module_a1.py
- - module_a2.py
- package_b ... |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| # main.py
from package_a import *
c = MyClassA()
# package_a/__init__.py
__ALL__ = ["common_a", "module_a1"]
# package_a/common_a.py
class MyBaseClassA():
def salut(self):
print("MyBaseClassA from package_a.common_a")
#package_a/module_a1.py
from common_a import *
class MyClassA(MyBaseClassA):
def salut(self):
print("MyClassA from module_a1 who inherits from MyBaseClassA defined in package_a.common_a") |
Déjà, est-ce que ça vous parait être une bonne structure pour un projet python ?
Premier point qui bloque, j'ai beau mettre des __init__.py à la racine de mes dossiers packages, en spécifiant __ALL__ = [...], l'instruction suivante (dans main.py)
Code:
from packageA import *
ne retourne pas d'erreur, mais rien n'est importé... quand je veux instancier une classe qui est définie dans le module A1 par exemple, il me dit que cette classe n'existe pas.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| $ ls
common.py main.py package_a __pycache__
$ ipython3
Python 3.5.2 (default, Jul 5 2016, 12:43:10)
IPython 2.4.1
In [1]: from package_a import *
In [2]: MyBaseClassA
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-71217d01a55b> in <module>()
----> 1 MyBaseClassA
NameError: name 'MyBaseClassA' is not defined
In [8]: from package_a.common_a import *
In [9]: MyBaseClassA
Out[9]: package_a.common_a.MyBaseClassA |
Qu'est-ce qu'il faut faire pour que le import * fonctionne correctement ?