在运行时设置默认值

时间:2011-05-26 14:48:45

标签: python

我管理了一个相当大的基于python的量子化学套件,PyQuante。我目前正在努力设置各种默认设置,以便用户可以在运行时选择不同的选项。

例如,我有三种不同的计算电子排斥积分的方法。我们称他们为a,b,c。我过去只是选择我最喜欢的那个(比方说,c),并将其硬连接到计算这些积分的模块中。

我现在修改了它以使用包含所有这些硬线的模块Defaults.py。但这是在编译/安装时设置的。我现在希望用户能够在运行时覆盖这些选项,比如使用.pyquanterc.py文件。

在我的整体例程中,我目前有类似

的东西
from Defaults import integral_method

我知道字典和.update()方法。但我不知道如何在现实生活中使用它。我的默认模块看起来像

integral_method = c

我应该修改Defaults.py的结尾来查找.pythonrc.py文件并覆盖这些值吗? E.g。

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

如果是这样,应该做什么样的事情?

3 个答案:

答案 0 :(得分:5)

使用您当前的设置,用户可以非常轻松地更改其脚本中的默认功能:

import Defaults
Defaults.integral_method = somefunc

如果用户将此添加到他的脚本中,则integral_method中使用Defaults的所有模块都将使用somefunc来计算积分。

答案 1 :(得分:3)

我可以通过工厂类来做这件事。

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

答案 2 :(得分:0)

这实际上取决于您的用户如何运行该工具集。如果他们每次都旋转python代码,只需在顶部标记OPTIONS设置一个块应该是好的。如果他们从命令行运行它,使用argparse库允许他们在命令行上切换选项。也许让它从configParser的文件中读取选项,以便用您的选项读取默认文件,如果用户设置了它,则可以选择附加文件。