Combien de classes dois-je le mettre dans un fichier?
Je suis habitué à la Java modèle où vous pouvez avoir une classe publique par fichier. Python n'a pas cette restriction, et je me demandais quelle est la meilleure pratique pour l'organisation de classes.
- Je pense que c'est une question raisonnable, compte tenu des exigences et des conventions d'autres langues, et la réponse est "<définir des modules Python et forfaits> et au-delà, c'est une question de préférence (d'opinion)" -- que la réponse n'est pas lui-même une opinion
Vous devez vous connecter pour publier un commentaire.
Un fichier Python est appelé un "module" et c'est un moyen pour organiser votre logiciel de sorte qu'il fait "sens". Un autre est un répertoire, appelé un "package".
Un module d'une chose qui peut avoir un ou deux douzaines étroitement liées à des classes. Le truc, c'est qu'un module est quelque chose que vous aurez à l'importation, et vous avez besoin que d'importer pour être parfaitement raisonnable pour les personnes qui vont lire, de maintenir et d'étendre votre logiciel.
Le principe est le suivant: un module est l'unité de réutilisation.
Vous ne pouvez pas réutiliser facilement d'une seule classe. Vous devriez être en mesure de réutiliser un module sans aucune difficulté. Tout dans votre bibliothèque (et tout ce que vous téléchargez et add) est un module ou d'un ensemble de modules.
Par exemple, vous travaillez sur quelque chose qui se lit de feuilles de calcul, fait quelques calculs et charges les résultats dans une base de données. Ce que vous voulez que votre programme principal pour ressembler à?
Penser à l'importation, comme la façon d'organiser votre code dans des concepts ou des morceaux. Exactement comment le nombre de classes dans chaque importation n'a pas d'importance. Ce qui compte c'est l'ensemble de l'organisation que vous êtes en dépeignant avec votre
import
consolidés.Car il n'y a pas de limite artificielle, cela dépend vraiment de ce qui est compréhensible. Si vous avez un tas de assez court, simple des classes qui sont logiquement regroupés, de le jeter dans un tas de 'em. Si vous avez le grand, complexe des classes ou des classes qui n'ont pas de sens en tant que groupe, passer un fichier par classe. Ou choisir quelque chose entre les deux. Refactoriser que les choses changent.
Il m'arrive d'aimer la Java de modèle pour la raison suivante. Mise en place de chaque classe dans un fichier individuel favorise la réutilisation en faisant des classes plus faciles à voir lorsque vous naviguez sur le code source. Si vous avez un tas de classes regroupées dans un seul fichier, il peut ne pas être évident pour les autres développeurs qu'il y a des classes qui peuvent être réutilisés simplement en naviguant sur le projet de structure de répertoire. Donc, si vous pensez que votre classe peut éventuellement être réutilisés, je le mettrait dans son propre fichier.
Il dépend entièrement de la taille du projet est, combien de temps les classes sont, s'ils sont utilisés à partir d'autres fichiers et ainsi de suite.
Par exemple, j'ai assez souvent l'utilisation d'une série de cours pour les données de l'abstraction - donc, j'ai peut-être 4 ou 5 classes qui ne peuvent être 1 ligne (
class SomeData: pass
).Il serait stupide de le diviser chacun de ces dans des fichiers séparés - mais ils peuvent être utilisés à partir de différents fichiers, de mettre tous ces éléments dans un distinct
data_model.py
fichier aurait du sens, afin que je puisse fairefrom mypackage.data_model import SomeData, SomeSubData
Si vous avez une classe avec beaucoup de code, peut-être avec certaines fonctions seulement il utilise, il serait une bonne idée de diviser cette classe et l'aide des fonctions dans un fichier séparé.
Vous devez structurer de façon à vous faire
from mypackage.database.schema import MyModel
, pasfrom mypackage.email.errors import MyDatabaseModel
- si lorsque vous importez des choses de sens, et les fichiers ne sont pas des dizaines de milliers de lignes de long, vous avez organisé correctement.La Les Modules Python documentation a quelques informations utiles sur l'organisation de paquets.
Je me retrouve fractionnement des choses quand je se fâcher avec la grandeur de fichiers et quand, la plus désirable, la structure de la parenté commence à émerger naturellement. Souvent, ces deux étapes semblent coïncider.
Il peut être très ennuyeux si vous séparez les choses trop tôt, parce que vous commencez à réaliser qu'un de totalement différent de la commande de la structure est nécessaire.
D'autre part, lorsque tout .java ou .py fichier est à plus de 700 lignes, je commence à pester constamment essayer de se souvenir où "ce bit" est.
Avec Python/Python dépendance circulaire de déclarations d'importation semble également jouer un rôle: si vous essayez de fractionner trop de coopérer blocs de construction de base dans des fichiers séparés cette "restriction"/"imperfection" de la langue semble forcer vous à un groupe de choses, peut-être plutôt une manière sensible.
De fractionnement dans les paquets, je ne sais pas vraiment, mais je dirais probablement la même règle de contrariété et de l'émergence de happy structure fonctionne à tous les niveaux de modularité.
Je dirais de mettre autant de classes peuvent être regroupés logiquement dans ce fichier sans en faire trop grand et complexe.