我应该将参数转发为*args和**kwargs吗?
我有一个类,用来处理我程序中的命令行参数,使用的是Python的optparse
模块。这个类还被几个其他类继承,以创建参数的子集。为了封装选项解析的机制,我想只向继承的类暴露一个叫add_option
的函数。这个函数的作用是调用optparse.make_option
。
我这样做是否合理:让我的add_option
方法在文档中说明它接受和optparse.make_option
相同的参数,然后把这些参数通过*args
和**kwargs
传递下去?
我是否应该提前检查一下参数?我希望尽量避免这样做,以便让这段代码与optparse
的具体版本解耦。
2 个回答
0
你确定你想要使用子类吗?其实,你重写的功能完全可以通过一个函数来实现。
1
看起来你希望你的子类能够了解命令行的内容,但这通常不是个好主意。
你应该把程序的配置输入部分封装起来,这样你就可以通过命令行、配置文件、其他Python程序等来驱动它。
所以,我建议你把子类中所有调用add_option的部分去掉。
如果你想在运行时了解你的配置需求是什么,我建议你直接把这些信息添加到你的子类中;让每个子类都有一个成员或方法,用来找出它需要什么样的输入。
然后,你可以创建一个输入整理类,遍历这些子类,提取出这些数据,并用它来驱动命令行、配置文件等等。
不过说实话,我在运行时从来没有需要这样做过。我通常会把所有的配置内容提取到一个单独的地方,这样可以回答“用户需要告诉工具什么?”这个问题,然后子类再去配置数据结构中寻找它们需要的内容。