我应该将参数转换为* args&** kwargs吗?
我有一个类在我的程序中使用python的optparse
模块来处理命令行参数。它也被几个类继承来创建参数的子集。为了封装选项解析机制,我只想透露一个函数add_option
来继承类。这个功能所做的就是致电optparse.make_option
。我应该将参数转换为* args&** kwargs吗?
它是一个很好的做法,只是有我add_option
法说,它接受相同的参数optparse.make_option
文档中,并且参数转发为*args
和**kwargs
?
我应该事先做一些参数检查吗?在某种程度上,我想避免这种情况,从optparse
的特定版本中分离出这段代码。
看来你希望你的子类有意识的命令行的东西,这往往不是一个好主意。
你想封装你的程序的整个配置输入部分,以便你可以用命令行,配置文件,其他python程序,无论如何驱动它。
因此,我会从您的子类中删除任何对add_option的调用。
如果您想在运行时发现您的配置要求的样子,我只需将该数据添加到您的子类;让每个人都有一个可以用来确定需要什么样的输入的成员或方法。
然后,您可以让输入管理器类遍历它们,将这些数据拉出来,然后用它来驱动命令行,配置文件或您有什么。
但说实话,我从来没有必要在运行时做这件事。我通常将所有配置的东西都拉到它自己的单独的东西上,这个东西回答了“用户需要告诉工具是什么?”这个问题,然后子类会在配置数据结构中查找他们需要的东西。
非常好的答案。我现在明白,为了封装命令行解析器,最好让它完全可配置。但我实际上决定采用S.Lott的建议,完全放弃封装。 – 2009-08-25 19:05:48
你确定子类是你想要做的吗?您的重写行为只能在函数中实现。
“add_option ...然后调用optparse.make_option。”这不正常的add_option做什么?如果是这样,为什么重写呢?为什么不忽略它呢?它将对子类可见。你到底在做什么? – 2009-08-25 13:28:08
这个类将驻留在一个框架部分,这些框架将被这些应用程序使用。它允许从多个来源(包括命令行)检索参数。每个应用程序都应该从中继承并添加特定的参数。你是说我应该只是将'optparse'暴露给子类而不是封装它? – 2009-08-25 13:59:23
你为什么要“封装”它?为何增加复杂性?这种封装有什么好处?你的新课堂有什么用例? – 2009-08-25 14:08:36