На самом деле, это не рекомендованный подход, и я никогда не видел его в реальном коде.
Рекомендуемый подход заключается в использовании модуля в качестве модуля уже имеет «глобальное» пространство имен (см this answer для получения дополнительной информации о globals()
, locals()
и vars()
).
Однако в интересах понимания:
То, что вы до сих пор является лишь основные рамки для общего состояния на уровне экземпляра. Что вам нужно теперь остальные государства вы хотите отслеживать:
class Config(Borg):
def __init__(self, config_file):
super(Config, self).__init__()
# load and parse file, saving settings to `self`
Одним из недостатков этого метода является то, что вы можете иметь несколько экземпляров, потребляющих память, что все знаем то же самое. (Не так много памяти, правда.)
Другим методом выполнения «общего состояния» является создание только одного экземпляра, а затем класс всегда возвращает тот же экземпляр, который иначе известен как singleton
.
class Config(object):
the_one = None
def __new__(cls, config):
if cls.the_one is None:
cls.the_one = Super(Config, cls).__new__(cls)
# load and parse file, saving settings to `cls.the_one`
return cls.the_one
метод либо приведет к следующему:
>>> config = Config('my_config_file.cfg')
>>> config.screen_size
# whatever was saved during the loading and parsing of the config file
# for 'screen_size'