J'écris une application de la fiole et j'ai trouvé que j'ai une tonne de fonctions utilitaires génériques.
Voici les exemples du type de fonctions que je considère sur les fonctions d'utilité générique: p> Je pensais jeter ces fonctions dans un module séparé tous ensemble. Cependant, je suis curieux si j'ai les préoccupations suivantes: p> question:
- Quelle serait la manière pythonique de regrouper des fonctions d'utilité génériques? Devrais-je créer un module séparé? Curieux ce que les autres font pour organiser ce type de code. P> P>
3 Réponses :
Je ne pense pas que cela ait beaucoup de relations avec Python, c'est plus une décision de conception. P>
Pour seulement ces lignes, je ne ferais pas un module séparé; Cependant, si vous l'utilisez 2 à 3 fois, je ne copierais pas le code. Si vous voulez plus tard changer quelque chose qu'un seul changement est nécessaire, maintenir la fonctionnalité cohérente. P>
Les méthodes semblent également être très génériques. Vous pouvez donc les utiliser facilement dans d'autres projets plus tard. P>
Et je suppose que vous voulez les faire statistiques ( Ce que je fais surtout, c'est que les classes utilitaires génériques de groupe par type, c'est-à-dire dans votre cas un fichier pour les dictionnaires (comptant une méthode) et un pour fichier (ayant 2 méthodes). Plus tard, plus de méthodes seront ajoutées, mais la fonctionnalité est regroupée par type / utilisation. P> @static_method code>). P>
C'est logique. J'étais réticent à mettre cela dans une classe seulement parce que j'ai (peut-être une notion incorrecte) pré-conçue de seulement créer des classes pour des éléments spécifiques à l'application. Cependant, je pense que je vais faire un hybride à l'aide de la solution que vous avez fournie ci-dessus .. I.e. Package utilitaire avec un module de fichier / dictionnaire. Le regroupement que vous avez fourni ci-dessus semble être un son, et comme vous l'avez dit, je peux développer ces modules lorsque je fais des fonctions plus génériques et que je peux les porter autour. En outre, je ferai probablement ces personnes indépendantes de l'application. Merci pour les commentaires.
Pourquoi "classes" et "static_methods"? Python n'est pas Java, lorsque tout ce dont vous avez besoin est une fonction, alors par tous les moyens utilise une fonction.
@ user2152283 Oui, il est préférable de les faire appliquer une application indépendante, cela vous permet d'économiser pour chaque futur projet que vous utilisez la fonctionnalité apportée.
@bruno Deshuilliers: Classes: Parce qu'une classe peut être considérée comme un ensemble de fonctionnalités autonomes, dans ce cas: Dictionnaire (utilitaires) et fichier (utilitaires). Statique, car vous ne voulez pas faire d'instance pour appeler une fonction ... Voir la classe de services publics (modèle de conception).
Dans Python, nous avons quelque chose appelé package (un dossier habituel avec un fichier vide appelé Votre application peut accéder à son propre espace d'espace à l'aide d'un espace nominal. P> Par exemple, ont les fichiers suivants p> et dans webapp.py vous pouvez avoir quelque chose comme Ceci p> ou les énumérer un par un p> Faites attention au préfixe du point avant Utils P> < / p> __ init __. py code>) Ceci est utilisé pour contenir tous vos modules de cette façon, nous créons un somesort d'espacement de nom.
Import * est généralement considéré comme une mauvaise pratique
@Kiro, en général, vous avez raison, mais dans un tel cas particulier, tout va bien, car utils.py C'est là qu'il va placer une fonction courante comme sa version de PHP's File_Get_Contents. Si vous êtes conclu, vous pouvez définir __ tout __ code>
Merci pour cette réponse. C'est une bonne réponse et je prévois d'utiliser une variante de cette solution.
@muayyadalsadi: Les importations d'étoiles sont toujours une mauvaise pratique - elles rendent le code plus difficile à comprendre (vous devez ouvrir utils.py pour savoir quels symboles vous importation) et ajouter un nouveau symbole dans utils.py peut potentiellement shadow un symbole existant dans le Modules où vous l'importatez d'étoiles.
L'idée de la réponse est de savoir comment emballer des utils à l'intérieur de son propre nom de nom, et non pour créer des choses importées. J'ai mis à jour ma réponse pour montrer comment importer des fonctions spécifiques
Vous pouvez faire quelque chose pour réduire le nombre de fichiers de module tout en conservant la sous-catégorisation de vos modules. Créez des fonctions de module multi-niveaux: mymodule.hash. <> mymodule.fileio. <> p>
De cette façon, vous pouvez importer des composants individuels conformément à votre goût. P>
Merci pour votre retour. J'aurais aussi marqué cela comme une réponse acceptable, marquant simplement ci-dessus comme réponse acceptée puisque c'était la première réponse. Merci!