Classes vs modules en Python

19

Python possède de nombreux modules (tels que re) qui effectuent un ensemble spécifique d'actions. Vous pouvez appeler les fonctions de ce module et obtenir des résultats, et le module dans son ensemble a une idée derrière lui (dans ce cas, traitant des expressions régulières).

Les classes semblent faire presque exactement la même chose, mais elles semblent également utiliser un peu plus les propriétés que les modules.

En quoi les modules sont-ils différents des classes? (Je sais que je ne peux pas sous-classer un module, mais est-ce le cas?) Quand dois-je utiliser une classe au lieu d'un module?

Pro Q
la source
Savez-vous que lorsque vous appelez des méthodes de module, parfois le module passe simplement à une instance d'une classe? Voir par exemple le randommodule. reCependant, je ne me souviens pas si cela est vrai .
jscs
1
Un concept connexe à connaître - Module vs package?
RBT

Réponses:

12

Un module python n'est rien d'autre qu'un package pour encapsuler du code réutilisable. Les modules résident généralement, mais pas toujours, dans un dossier contenant un __init__.pyfichier. Les modules peuvent contenir des fonctions mais aussi des classes. Les modules sont importés à l'aide du importmot - clé.

Python a un moyen de mettre des définitions dans un fichier et de les utiliser dans un script ou dans une instance interactive de l'interpréteur. Un tel fichier est appelé module; les définitions d'un module peuvent être importées dans d'autres modules ou dans le module principal.

En savoir plus sur les modules Python à ces liens:

https://docs.python.org/2/tutorial/modules.html (Python 2) https://docs.python.org/3/tutorial/modules.html (Python 3)

Les classes, en revanche, peuvent être définies dans votre code d'application principal ou dans des modules importés par votre application. Les classes sont le code de la programmation orientée objet et peuvent contenir des propriétés et des méthodes.

En savoir plus sur les classes Python à ces liens:

https://docs.python.org/2/tutorial/classes.html (Python 2) https://docs.python.org/3/tutorial/classes.html (Python 3)

Eneko Alonso
la source
3
Ce n'est donc pas une mauvaise chose d'avoir une seule classe dans un module, même si cette classe n'a que des fonctions? J'ai l'impression que dans cette situation, je devrais généralement juste faire un module sans faire de classe. Existe-t-il une règle sous-jacente quant à l'utilisation des classes au lieu des modules? (C'est ce que j'essaie de demander ... Dois-je modifier ma question pour la rendre plus claire?)
Pro Q
6
Vous pouvez créer plusieurs instances d'une classe, mais vous ne pouvez pas créer d'instances d'un module. Vous pouvez comparer des modules à des classes statiques ou à des singletons.
Eneko Alonso
1
Les modules ne résident pas toujours dans un dossier contenant un __init__.pyfichier.
multigoodverse
1
@ProQ Dans des langages comme Python où vous pouvez avoir des fonctions dans des modules plutôt que dans des classes (par opposition à, disons, Java), il est généralement bon de simplement garder les fonctions statiques au niveau du module. Les classes impliquent des instances avec leur propre état.
Turksarama
-2

Si c'est un tas de fonctions pures, par exemple re, je les mets dans un module. J'utilise une classe quand je sais qu'il y a un état que je veux conserver avec ce code (par exemple un fichier qui est lu une fois, mais dont les données sont utilisées par plusieurs des fonctions).

Greg Bell
la source