Igorek
Дек. 13, 2007 14:17:40
есть класс
class Daemon:
def prop(self):
pass
name = 'Daemon'
Хотелось получить с помощью name вызов class Daemon
Как это сделать. Объясните пожалуйста
Yurietc
Дек. 13, 2007 15:01:36
Я делаю через словарь :
>>> class A:
def a(self):
print ‘a’
>>> V={'A':A()}
>>> V.a()
a
balu
Дек. 13, 2007 15:07:08
Igorek
name = ‘Daemon’
Хотелось получить с помощью name вызов class Daemon
name = getattr(your, ‘Daemon’)
print name
Это имелось в виду?
lukke
Дек. 13, 2007 15:12:19
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
Может выглядит не очень.
Igorek
Дек. 13, 2007 15:46:24
Вариант lukke, то что надо спасибо.
poltergeist
Дек. 13, 2007 16:03:42
а у меня такой случай, что надо создавать объект по имени класса, который находится в отдельном модуле, и там locals() не видит все классы модуля, так что надо было использовать globals()
class_name = ‘Daemon’
class_inst = globals().get(class_name)
class_obj = class_inst()
j2a
Дек. 13, 2007 19:40:27
Как-то вы сложно. Описание класса находится в модуле. Соответственно, применив 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>’
Igorek
Дек. 14, 2007 17:26:00
Спасибо за советы - направление понятно.
Jenyay
Дек. 14, 2007 17:40:34
А как можно узнать какие классы есть в модуле?
j2a
Дек. 14, 2007 18:44:26
dir(imported_module_obj). Только не классы, а объекты, определенные в данном модуле. А класс данный объект или нет – issublcass(yourobj, object) (полагая, что у тебя используются новые классы).