Форум сайта python.su
Есть class A(), набор модулей с набором констант (имена констант совпадают).
После инициализации класса A становиться понятно какой набор констант нужен.
Что нужно:
После инициализации класса A все константы из заданного модуля должны быть глобально доступными.
Пробовал так:
s1.py
a = 7
s2.py
a =8
part.py
Class A()
__init__(self):
self.setup = <read from somewere>
exec “from %s import *” % self.setup
print a
где-то происходит
test.py
from part import *
A()
print a
По фигу что надо будет сделать в конструкторе класса A, но в test.py должна печататься переменная a.
Это вааще реально сделать?
Отредактировано (Авг. 7, 2009 16:14:06)
Офлайн
Шрифт – говно.
__init__(self):
#...
exec 'import %s as foo'%self.setup
for k, v in vars(foo).iteritems():
globals()[k] = v
#...
Отредактировано (Авг. 7, 2009 17:56:17)
Офлайн
Что-то не совсем понятно: глобально доступные - это где?
Пример bw вставит в модуль, в котором лежит A.__init__
Т.е. в part.py
Можно словить фрейм, прыгнуть на 2? вверх и менять f_globals
Но тогда имена попадут только в тот модуль, который создавал A()
Запихнуть везде, где только можно - тоже выйдет, если захотеть.
Но оно надо?
В любом случае запрос звучит как сильное колдунство, которое может сильно и больно ударить в ответ.
Я бы писал
a = A()
print a.a
Отредактировано (Авг. 7, 2009 18:36:57)
Офлайн
почитай в документации про функцию __import__ ..
а лучше сделай класс например Data например и с его обьектов уже проводи такие манипуляции а не с глобальной областью видимости
Офлайн
Пасиба, bw!
Это реально помогло!
Офлайн