Bonjour
J'écris régulièrement des packages qui sont utilisés par d'autres personnes, avec plusieurs modules et, parfois, une (petite) arborescence.
Pour éviter que les utilisateurs aient à connaître très précisément où les classes et les fonctions sont définies et à faire des imports "compliqués", j'ai pris l'habitude d'importer, dans le fichier __init__.py du package ces classes et fonctions qu'ils auront à utiliser.
Par exemple :
avec module_1.py :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5+ package |__ __init__.py |__ module_1.py |__ module_2.py
module_2.py :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 class Classe_1(object): pass
__init__.py :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 class Classe_2(object): pass
Cela permet alors d'écrire dans les scripts utilisant le package :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 from module_1 import Classe_1 from module_2 import Classe_2 __all__ = ['module_1','module_2']
Ca fonctionne mais je ne suis pas sur de bien mesurer les effets de bord possibles ou les inconvénients de cette méthode.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 from package import Classe_1, Classe_2 # plutot que # from package.module_1 import Classe_1 # from package.module_2 import Classe_2
Avez-vous un avis là dessus ?
Partager