I have an application consisting of a base app that brings in several modules. The base app reads a parameter file into a configuration hash, and I want to share it across all my modules.
Currently, I am passing a ‘parent’ object down to modules, and then those modules are doing stuff like self.parent.config to obtain the configuration.
However, as there are several levels to the module hierarchy, I find myself doing things like self.parent.parent.config, which is starting to look bad.
What are some better patterns for sharing a config object across an application and it’s modules? I am thinking about having a ‘config’ module which basically creates a global config variable that can be set by the base app, then imported and accessed by other modules, but I am not sure if using globals like that is a bad practice for other reasons.
I am reasonably new to Python so be nice =)
You could just:
and have a global config module
excerpts from my comments:
You can always add special rules for odd situations by just saying
oddValue if isOddSituation() else config.normalValue.If you want to have configuration modules be hierarchically subclassable (like my other answer describes), then you can represent a config as a class, or you can use the
copymodule and make a shallow copy and modify it, or you can use a “config dictionary”, e.g.:It doesn’t really matter too much which scope you’re in.