2014-01-15 3 views
0

Прежде всего я хотел бы заявить, что я достаточно новое для программирования Python, поэтому мой подход к решению проблемы может быть неправильным, пожалуйста, дайте мне знать, если это такСинглтон класс не сохраняет значение

I Я пытаюсь использовать класс Singleton для хранения параметров конфигурации в своем коде и использовать его при необходимости. Я столкнулся с проблемой, что данные, хранящиеся в Singleton в первоначальном создании, не сохраняются при последующих вызовах Object.

Возможно, способ, которым я создаю объект Singleton, неверен, но я следил за образцами кода, которые были на SO.

первый вот мой Singleton класс

class Config(object): 

    __instance = None 

    dbserver = "" 

    def __new__(cls): 
     if cls.__instance == None: 
      __instance = object.__new__(cls) 
      __instance.name = "Configuration Object" 
     return __instance 

Вот мое первоначальное создание экземпляра Singleton

configurator = Config() 
configurator.dbserver = dbserver 

впоследствии я сделать следующее и dbserver свойство возвращает пустую строку.

configurator = Config() 
print configurator.dbserver 

Спасибо, что прочитали время.

+0

Это похоже на http://stackoverflow.com/questions/42558/python-and-the-singleton-pattern – Chandan

+1

'cls .__ instance' всегда' None', поэтому каждый раз, когда создается новый объект. – thefourtheye

ответ

5

Кажется, что не присвоена локальная переменная __instance переменной класса cls.__instance.

Однако, если вы просто делаете это для хранения переменных, я не знаю, зачем вам нужен экземпляр вообще. Просто сохраните их непосредственно в классе, который сам по себе является первоклассным объектом в Python, или даже использует модуль, который является более Pythonic.

Редактировать

Использование самого класса не вызывает код, который будет повторно запускаться каждый раз: код на уровне класса выполняется только когда класс определен, что происходит на первом импорте.

Но поскольку класс должен жить где-то в модуле (файле), вы могли бы просто поместить весь этот код непосредственно в модуль и импортировать его там, где он вам нужен. Опять же, код на уровне модуля выполняется только при первом импорте.

+0

wow, ошибка Nub, спасибо большое :) – DevZer0

+0

Я читаю конфигурацию из файла конфигурации и сохраняю в классе во время выполнения, но я вижу, что вы предлагаете мне использовать класс, который он сам может прочитать переменные из config файл и иметь его доступным. Но если я не использую одноэлементный объект, ему придется перечитывать конфигурационный файл каждый раз, когда я его использую? можете ли вы подробнее рассказать о подходе Pythonic, который вы предлагали – DevZer0

+0

, поэтому вместо того, чтобы создавать конфигурационный файл, используйте его как файл конфигурации? – DevZer0

Смежные вопросы