2 votes

Définir les valeurs par défaut au moment de l'exécution

Je gère une assez grande suite de chimie quantique basée sur Python, PyQuante . Je me demande actuellement comment définir diverses valeurs par défaut afin que les utilisateurs puissent choisir entre différentes options au moment de l'exécution.

Par exemple, je dispose de trois méthodes différentes pour calculer les intégrales de répulsion des électrons. Appelons-les a, b, c. Avant, je choisissais simplement celle que je préférais (disons c) et je la câblais dans le module qui calcule ces intégrales.

Je l'ai maintenant modifié pour utiliser un module, Defaults.py, qui contient tous ces fils durs. Mais ce module est défini au moment de la compilation/installation. J'aimerais maintenant que les utilisateurs puissent remplacer ces options au moment de l'exécution, par exemple en utilisant un fichier .pyquanterc.py.

Dans mes routines intégrales, j'ai actuellement quelque chose comme

from Defaults import integral_method

Je connais les dictionnaires et la méthode .update(). Mais je ne sais pas comment je pourrais utiliser cela dans la vie réelle. Mon module defaults ressemble à

integral_method = c

Dois-je modifier la fin de Defaults.py pour rechercher un fichier .pythonrc.py et remplacer ces valeurs ? Par exemple

if os.path.exists('$HOME/.pythonrc.py'): do_something

Si c'est le cas, à quoi devrait ressembler do_something ?

5voto

sth Points 91594

Avec votre configuration actuelle, l'utilisateur peut changer les fonctions par défaut dans ses scripts assez facilement :

import Defaults
Defaults.integral_method = somefunc

Si l'utilisateur ajoute ceci à son script, tous vos modules qui utilisent la fonction integral_method de Defaults utilisera somefunc pour calculer les intégrales.

3voto

Daenyth Points 11297

Je pourrais le faire via une classe d'usine.

class IntegralSolver:
    """
    Factory class containing methods for solving integrals.

    >>> solver = IntegralSolver("method1")
    >>> solver(x)
    # solution via method1

    Can also be used directly:
    >>> IntegralSolver.method2(x)
    # solution via method2
    """
    def __init__(self, method):
        self.__call__ = getattr(self, method)

    @staticmethod
    def method1(x):
        return method1_solution

    @staticmethod
    def method2(x):
        return method2_solution

0voto

Spencer Rathbun Points 6171

Cela dépend vraiment de la façon dont votre utilisateur utilise les outils. S'il manipule le code python à chaque fois, il suffit de placer un bloc en haut de la page intitulé OPTIONS. S'il l'exécute en ligne de commande, utilisez la fonction argparse pour leur permettre de changer d'option sur la ligne de commande. Peut-être que les options peuvent être lues à partir d'un fichier avec la commande configParser pour lire un fichier par défaut avec vos options, et si l'utilisateur le définit, un fichier supplémentaire avec ses options.

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