Я работаю над относительно большим 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 ...
Это, безусловно, значительно урезано от того, что на самом деле является моим приложением, и пренебрегает обработкой ошибок, документацией и в основном всеми деталями реализации.
Теперь я видел, как он сказал, что это плохая идея, но без объяснения причин. Поскольку большинство результатов, когда googling для вариантов "python import __main__" - это вопросы о том, что if __name__ == '__main__'
, трудно найти твердую информацию по этой теме. До сих пор у меня не было никаких проблем с этим, и на самом деле это было действительно удобно.
Итак, это считается хорошей практикой на Python, или есть причина, по которой мне следует избегать этого дизайна?