Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 22, 2011 16:05:41

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Статика в питоне

Подскажите как создать в отдельном модуле статическую переменную (кэш БД), что б её один раз только инициализировать и потом использовать, независимо от того как подгружаются модули.
У меня такая проблема:

#!/usr/bin/python
# encoding: utf-8
# module - 1
var1 = {"a":"1"}
#!/usr/bin/python
# encoding: utf-8
# module - 2
import module1

def met2():
reload(module1)
print ("mudule2", module1.var1)
#!/usr/bin/python
# encoding: utf-8
# module - 3
import module1
import module2

module1.var1 = {"b":"2"}
module2.met2()
Результат такой:
bash# ./module3.py
('mudule2', {'a': '1'})
Как это правильно сделать?



Офлайн

#2 Янв. 22, 2011 16:33:49

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Статика в питоне

Похоже я решил проблему, а тред видимо боян, т.к. не факт что вообще это возможно.



Офлайн

#3 Янв. 22, 2011 19:53:40

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Статика в питоне

alexx11
Похоже я решил проблему, а тред видимо боян, т.к. не факт что вообще это возможно.
“reload(module1)” не надо, и все будет работать

Офлайн

#4 Янв. 22, 2011 19:55:21

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Статика в питоне

главное что-б эта переменная была не в стартовом модуле

Офлайн

#5 Янв. 22, 2011 19:55:36

neol
От:
Зарегистрирован: 2009-09-20
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Статика в питоне

class Module(object):
_instance = None
var1 = {"a":"1"}

def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Module, cls).__new__(
cls, *args, **kwargs)
return cls._instance
import module1

def met2():
mod = module1.Module()
print ("mudule2", mod.var1)
import module1
import module2

mod = module1.Module()
mod.var1 = {"b":"2"}
module2.met2()
python module3.py
('mudule2', {'b': ‘2’})

Слова для поиска: python singleton pattern



Офлайн

#6 Янв. 22, 2011 20:57:37

Kogrom
От:
Зарегистрирован: 2009-12-03
Сообщения: 160
Репутация: +  0  -
Профиль   Отправить e-mail  

Статика в питоне

neol, reload потерял :)
Синглетон тут не нужен. И неизвестно, нужен ли он вообще.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version