在类树深处的模块中需要的命令行标志



想象一下,我们有一个带有命令行界面的程序,并为其提供标志。这些标志由类树深处的类使用。

例如,主程序使用类A的实例,类A使用类B的实例。。。使用类Z的实例。如果Z需要主程序中给定的标志,我们必须将该标志作为参数提供给类A、类B、类C的构造函数……一直到类Z。

当然,也有其他选择,比如使用环境变量,或者在文件中定义这个变量,甚至在主程序中硬编码。但还有更准确的替代方案吗?

提前感谢任何可能读到这篇文章的人。

我现在已经使用了环境变量,这不是一个很好的方法。

这样做的一种方法如下。假设您有一个名为argutils.py的模块(如果您愿意,可以将下面的代码放在现有的实用程序模块中(:

# argutils.py
import argparse
options = None
def get_command_line_options():
if options:
return options
parser = argparse.ArgumentParser(...) # define as needed
parser.add_argument(...) # add arguments as needed for your CLI
global options
options = parser.parse_args()
return options

然后在剩下的代码中,你可以进行

from argutils import options as cmdline_options
# and then use attributes of the cmdline_options object as desired

最新更新