Есть переменная - объект класса. Нужно чтобы ее было видно из всех модулей (создается она в главном). (В том числе из объектов других классов, если это имеет значение.)
Можно такое сделать? Если да, то как?
З.Ы. Туплю наверно... но никак не соображу...
З.З.Ы. Питон 2.6, но могу поставить 2.7, если вдруг это там появилось.
python: доступность (видимость) переменной из всех модулей
Модератор: Модераторы разделов
-
nadge
- Сообщения: 1519
- ОС: ArchLinux, Ubuntu 10.10
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: python: доступность (видимость) переменной из всех модулей
Положить её в модуль и импортировать этот модуль везде, где надо.
Скорее уж исчезло бы. Глобальные переменные -- ужасное зло, об этом известно очень давно.
Мои розовые очки
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: python: доступность (видимость) переменной из всех модулей
Если очень хочется, можно извратиться следующим образом:
Код: Выделить всё
import os
import ...
import ...
GLOBALVAR=...
module = type(os)
for value in globals().itervalues():
if type(value) == module:
setattr(value, "GLOBALVAR", GLOBALVAR)Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: python: доступность (видимость) переменной из всех модулей
Ужас какой :)
Код: Выделить всё
__builtins__.GLOBALVAR = GLOBALVARМои розовые очки
-
nadge
- Сообщения: 1519
- ОС: ArchLinux, Ubuntu 10.10
Re: python: доступность (видимость) переменной из всех модулей
Положить её в модуль и импортировать этот модуль везде, где надо.
С этого и начал, но проблема в том, что иногда значение этой переменной должно меняться... а просто поменять ее не получается - в других модулях вроде как видна старая (или я не так что-то сделал?). В итоге написал отдельную тривиальную функцию внутри этого модуля для смены значения переменной... Вроде заработало.
Если очень хочется, можно извратиться следующим образом:
Любопытно, попробую.
Скорее уж исчезло бы. Глобальные переменные -- ужасное зло, об этом известно очень давно.
Согласен с Вами, но в моем случае это нужно, в основном, для отладки - в релизе можно будет закомментить. Просто специфика такая...
Если вкратце, то часть проекта функционирует как виндовый сервис, да еще и по сети (т.е. обычным отладчиком проблематично отлаживать)... В итоге из всех модулей из каждого класса и отдельных функций посылается куча отладочных сообщений по джабберу (есть лучше варианты?). И чтобы не создавать путаницу в коде я и решил использовать глобальную переменную.
З.Ы. За ответы спасибо. Вроде все заработало, но надо еще потестировать...
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: python: доступность (видимость) переменной из всех модулей
Видимо, не так. Всё должно нормально меняться. Только импортировать надо не "from module import var", а просто "import module" и обращаться к переменной "module.var", тогда всё будет в порядке.
Код: Выделить всё
# m1.py
a = 1Код: Выделить всё
# m2.py
import m1
def getA():
return m1.a
def setA(value):
m1.a = valueКод: Выделить всё
# m3.py
from m1 import a
def getA():
return aКод: Выделить всё
# p1.py
import m1, m2, m3
print m1.a, m2.getA(), m3.getA()
m1.a = 2
print m1.a, m2.getA(), m3.getA()
m2.setA(3)
print m1.a, m2.getA(), m3.getA()user@localhost
$ python p1.py
1 1 1
2 2 1
3 3 1
$Как видно, m3.py работает не так, как хотелось. При присваивании тем более.
Модуль logging.
Мои розовые очки
-
nadge
- Сообщения: 1519
- ОС: ArchLinux, Ubuntu 10.10
Re: python: доступность (видимость) переменной из всех модулей
watashiwa_darede...
В приведенный код сейчас не въеду, но утром посмотрю - спасибо.
Если я правильно понял Вашу идею (через этот модуль посредством моей функции слать на тот же джаббер), то вариант вроде хороший. Попробую, спасибо.
В приведенный код сейчас не въеду, но утром посмотрю - спасибо.
Модуль logging.
Если я правильно понял Вашу идею (через этот модуль посредством моей функции слать на тот же джаббер), то вариант вроде хороший. Попробую, спасибо.
-
nadge
- Сообщения: 1519
- ОС: ArchLinux, Ubuntu 10.10
Re: python: доступность (видимость) переменной из всех модулей
Воспользовался, написав соответствующий handler. Все работает и очень удобно. Еще раз спасибо за идею.