我从离开我们公司的开发人员那里收到了一个项目。不太复杂,但看起来不是很好。所以这是一个问题:应用程序有一些模块,一个是存储一些应用程序的“设置”。选项(不是所有可能的选项,让我们说两个:foo
和bar
)。当应用程序启动时,它从命令行读取选项(使用 argparse):
parser.add_argument('--foo', action='store_true')
parser.add_argument('--bar', action='store_true')
parser.add_argument('--baz', action='store_true')
然后它执行了这个讨厌的事情:
for name, val in parser.parse_args(sys.argv[1:])._get_kwargs():
setattr(sys.modules['settings'], name, val)
第一:我认为这是肮脏的,非pythonic hack。其次,使用这样的代码很不方便,因为当我需要使用时settings.baz
,IDE 抱怨它不存在。此 hack 的目的是使从命令行解析的选项在应用程序中进一步使用的所有模块中可用。
我正在考虑类似单例模式的东西,但我只在 PHP 中使用过一次,不知道这在 python 中是否正确。即使是这样,有人可以举个例子吗?
我是python和SO的菜鸟,请善待我:)谢谢。
ps 对于我的英语可能出现的错误,我深表歉意