11 votes

Comment créer un paquet python avec plusieurs fichiers sans sous-paquets ?

J'essaie de créer un paquetage (mypackage) qui contient quelques classes, mais je voudrais que les classes soient contenues dans plusieurs fichiers.

Par exemple, je veux que class_a.py contienne une classe nommée ClassA, etc...

J'aimerais donc avoir la structure de fichier suivante :

  .../mypackage 
       __init__.py
       class_a.py
       class_b.py
       ...

Cependant, j'aimerais charger et utiliser le paquet de la manière suivante :

load mypackage
a = mypackage.ClassA()

Que dois-je faire (je suppose dans le fichier __init__.py) pour que cela soit possible. Actuellement, il fonctionne en utilisant "mypackage.class_a.ClassA()" ?

5voto

Comme indiqué, dans votre __init__.py pour une classe, utilisez ce qui suit :

from class_a import ClassA
from class_b import ClassB

dans le cas d'un fichier sans classe, utiliser ce qui suit :

from . import file_a
from . import file_b

ou si vous ne souhaitez exposer que des méthodes spécifiques d'un fichier :

from .file_a import method_a
from .file_b import method_b

1voto

9000 Points 13242

Faites votre __init__.py importez tous vos ClassA , ClassB etc. à partir d'autres fichiers.

Vous pourrez alors import mypackage et utiliser mypackage.ClassA ou from mypackage import ClassA et l'utiliser en tant que ClassA .

Un peu d'histoire.

Un import foo recherche foo.py , alors pour foo/__init__.py et charge les noms définis dans ce fichier dans l'espace de noms actuel. Placez tout ce dont vous avez besoin au "premier niveau" dans le fichier __init__.py .

En outre, jeter un coup d'œil sur __all__ variable de premier niveau si vous avez tendance à from mypackage import * .

-1voto

Andenthal Points 715

Dans votre __init__.py ajouter ceci :

from class_a import ClassA
from class_b import ClassB

del class_a
del class_b

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X