Python эквивалент для Ruby's ObjectSpace?

1

У меня есть имя класса, хранящегося в var, от которого мне нужно создать объект. Однако я не знаю, в каком модуле он определен (если бы я это сделал, я бы просто вызвал getattr (module, var), но я знаю, что он импортирован.

Должен ли я проходить через каждый модуль и проверять, существует ли там класс? Как это сделать в python?

Что делать, если у меня есть модуль + класс в том же var, как я могу создать объект из него? (т.е. var = 'module.class') Ура, Зе

Теги:
module
metaprogramming

3 ответа

1
Лучший ответ

globals()[classname] должен это сделать.

Больше кода: http://code.activestate.com/recipes/285262/

0

Вместо того, чтобы хранить имя класса как строку, почему бы вам не сохранить объект класса в var, так что вы можете создать его экземпляр напрямую.

>>> class A(object):
...     def __init__(self):
...         print 'A new object created'
... 
>>> class_object = A
>>> object = class_object()
A new object created
>>> 
0

Классы не добавляются к глобальному реестру в Python по умолчанию. Вам нужно будет перебирать все импортированные модули и искать его.

  • 0
    Когда я запускаю globals() я вижу немного больше, чем ничего. Я особенный?
  • 0
    @Oli: Вы знаете , что globals() только показывают имена в текущем модуле ... не так ли?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню