Столкнулся с тем, что оказывается, я никогда этого не делал, а нужно. Например:
IDLE 1.2.1 ==== No Subprocess ====
>>> class stub(object):
def hi(self):
print "Hi !"
>>> a = stub()
>>> a.hi()
Hi !
>>> a
<__main__.stub>
>>> str = u'stub'
>>> str
u'stub'
>>> b = str()
Traceback (most recent call last):
File "", line 1, in
b = str()
TypeError: 'unicode' object is not callable
Не работает - по имени не создаёт класс !
Порылся, нашёл такое. То есть, через globals():
Потом решил поискать на русском (на английском ничего вразумительного на эту тему найти не удалось, далеко запрятано), и, как всегда, оказалось, что наши программисты самые программистые программисты в мире ! :-) No joke !
>>> b = globals()[str]()
>>> b
<__main__.stub>
Итак, здесь тема сами знаете чего раскрыта!.
В данном случае (в idle) сработает и locals():
По вышеуказанному линку на форуме также указано, как создать объект, если известно имя его класса и модуля:
>>> c = locals()[str]()
>>> c
<__main__.stub>
>>> module_name = 'pprint'
>>> class_name = 'PrettyPrinter'
>>> imported_module_object = __import__(module_name)
>>> kls = getattr(imported_module_object, class_name)
>>> pp = kls()
>>> pp.__class__.__name__
'PrettyPrinter'
>>> repr(pp)
pprint.prettyprinter
Вообще, Портал Python-программистов читать очень рекомендую - хороший сайт.
Большое спасибо.Нашла здесь нужную мне информацию про создание класса по его имени.
ОтветитьУдалить