Python эквивалент для Ruby's ObjectSpace? - PullRequest
1 голос
/ 23 февраля 2010

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

Должен ли я пройтись по каждому модулю и проверить, определен ли там класс? Как мне сделать это в Python?

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

Ответы [ 3 ]

1 голос
/ 23 февраля 2010

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

Дополнительный код: http://code.activestate.com/recipes/285262/

0 голосов
/ 23 февраля 2010

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

>>> class A(object):
...     def __init__(self):
...         print 'A new object created'
... 
>>> class_object = A
>>> object = class_object()
A new object created
>>> 
0 голосов
/ 23 февраля 2010

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

...