Форум сайта python.su
есть класс
class Daemon:
def prop(self):
pass
name = 'Daemon'
Офлайн
Я делаю через словарь :
>>> class A:
def a(self):
print ‘a’
>>> V={'A':A()}
>>> V.a()
a
Офлайн
Igorekname = getattr(your, ‘Daemon’)
name = ‘Daemon’
Хотелось получить с помощью name вызов class Daemon
Офлайн
class Daemon(object):
def __init__(self, name):
self._name = name
@property
def Name(self):
return self._name
name = ‘Daemon’
inst = locals().get(name)('Some Daemon')
print inst.Name
Может выглядит не очень.
Офлайн
Вариант lukke, то что надо спасибо.
Офлайн
а у меня такой случай, что надо создавать объект по имени класса, который находится в отдельном модуле, и там locals() не видит все классы модуля, так что надо было использовать globals()
class_name = ‘Daemon’
class_inst = globals().get(class_name)
class_obj = class_inst()
Офлайн
Как-то вы сложно. Описание класса находится в модуле. Соответственно, применив getattr(imported_module_object, class_name) получите желаемое.
Пример:
>>> 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 instance at 0xb77e3bac>’
Офлайн
Спасибо за советы - направление понятно.
Офлайн
А как можно узнать какие классы есть в модуле?
Офлайн
dir(imported_module_obj). Только не классы, а объекты, определенные в данном модуле. А класс данный объект или нет – issublcass(yourobj, object) (полагая, что у тебя используются новые классы).
Офлайн