我正在开发一个相对较大的Python应用程序,我希望在几个不同的模块中保留一些作为全局变量可访问的资源。这些值包括版本号、版本日期、全局配置和资源的一些静态路径。我还包括了一个DEBUG
标志,它由命令行选项设置,这样我就可以在调试模式下运行我的应用程序,而不需要完整的环境。
我导入的值我很小心地确保它们在程序运行过程中不会改变,并且我将它们记录为全局常量变量,不应该被触及。我的代码基本上看起来像
# Main.py
import wx
from gui import Gui
DEBUG = False
GLOBAL_CONFIG = None
VERSION = '1.0'
ICON_PATH = 'some/path/to/the/app.ico'
def main():
global DEBUG, GLOBAL_CONFIG
# Simplified
import sys
DEBUG = '--debug' in sys.argv
GLOBAL_CONFIG = load_global_config()
# Other set-up for the application, e.g. setting up logging, configs, etc
app = wx.App()
gui = Gui()
app.MainLoop()
if __name__ == '__main__':
main()
# gui.py
import wx
from __main__ import DEBUG, GLOBAL_CONFIG, ICON_PATH
import controller
class Gui(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
icon = wx.Icon(ICON_PATH, wx.BITMAP_TYPE_ICO)
self.SetIcon(icon)
# Always make a copy so we don't accidentally modify it
conf = GLOBAL_CONFIG.copy()
self.controller = controller.Controller(conf)
# More setup, building the layout, etc
# controller.py
from __main__ import DEBUG
import logging
log = logging.getLogger('controller')
class Controller(object):
def __init__(self, conf):
if DEBUG:
log.info("Initializing controller in DEBUG mode")
self.conf = conf
# Other setup ...
这显然与我的应用程序的实际情况相差甚远,忽略了错误处理、文档以及基本上所有实现细节。
现在,我已经seen it said这是一个坏主意,但没有解释原因。因为在搜索“python import”的变体时,大多数结果都是关于什么是if __name__ == '__main__'
的问题,所以很难找到关于这个主题的可靠信息。到目前为止我对它没有任何问题,而且它确实非常方便。
这被认为是良好的Python实践,还是有理由避免这种设计?
这样做需要违反PEP8,它指定
为了使
gui.py
成功导入__main__.DEBUG
,您必须在^{import gui
之前设置DEBUG
的值。相关问题 更多 >
编程相关推荐