En python, est-il préférable de définir un module avec des fonctions ou un module avec une classe qui contient des fonctions? [fermé]

13

Dans mon code, l'une des deux options ci-dessus fonctionnerait tout aussi bien, mais je suis intéressé à découvrir les avantages et les inconvénients des deux approches.

TK100
la source

Réponses:

9

Cela dépend honnêtement de vos besoins. La plupart du temps, un module de fonctions sera ce que vous recherchez.

Les classes Python (imho) ne doivent pas être considérées comme des classes en C # ou C ++ ou Java, il doit y avoir une raison logique de regrouper un ensemble de fonctions dans un parent plus grand, les structures de données en seraient un bon exemple, vous voulez un ensemble congru de fonctions qui s'appliquent directement à la classe au lieu d'un ensemble de fonctions vaguement collectées à usage général.

  • Module de fonctions: fonctions générales, utilitaires et autres fonctions «globales»
  • Module de classe de fonctions: classes groupées de besoins similaires, différents types de données de liste liée ou fonctions de traitement audio ou différents types d'arborescence.

Un module est pour le regroupement hiérarchique global de systèmes similaires, j'ai généralement toutes les fonctions utilitaires sous un seul module, toutes les données sous un autre, ma couche de données et les connecteurs sous un module de type plus "parent". Puisqu'un module n'est qu'un regroupement mental, il s'agit moins des types de systèmes qu'il contient (classes ou fonctions, honnêtement probablement un mélange des deux) et plus des connexions logiques entre les systèmes sous le module.

Jeff Langemeier
la source
6
Je ne comprends pas le contraste entre une classe Python et d'autres langages. Dans quelle langue auriez-vous une classe avec des fonctions qui n'ont aucune raison logique d'être regroupées?
Guy Sirton du
7

La question de base est de savoir si vous avez besoin d'avoir différentes instances de votre module / classe. un module python est comme un singleton - vous faites toujours référence au même objet, c'est-à-dire que si vous avez besoin d'instances, vous avez besoin d'une classe.

Cependant, si vous n'avez pas besoin d'instances, vous devrez peut-être encore configurer votre "objet" à un état initial. Bien que cela soit clairement possible avec un module simple, si l'initialisation est plus complexe que la simple définition de certaines valeurs, je conseillerais d'avoir un code d'initialisation dans la __init__méthode de lisibilité d' une classe .

kr1
la source
2
il peut être utile de souligner que vous parlez probablement de quelque chose qui a un état, par exemple un module avec des variables globales contre une classe avec des variables membres. si votre classe n'a que des méthodes mais pas d'état, il y a peu de raisons d'avoir plusieurs instances
thbusch
3
@thbusch, oui, cela implique implicitement d' avoir besoin d'instances .
kr1
Lorsque vous avez parlé de la nécessité d'une instance qui m'a fait comprendre module vs classe. Comme si j'avais besoin de faire plusieurs voitures, une classe serait appropriée par rapport à un module de calculatrice où je n'ai pas besoin de faire un tas de calculatrices, j'ai juste besoin d'utiliser les méthodes d'addition et de soustraction de ce module.
tazboy