Найти - Пользователи
Полная версия: Преобразование строки в имя класса
Начало » Python для экспертов » Преобразование строки в имя класса
1 2 3
Igorek
есть класс
class Daemon:
def prop(self):
pass


name = 'Daemon'
Хотелось получить с помощью name вызов class Daemon

Как это сделать. Объясните пожалуйста
Yurietc
Я делаю через словарь :


>>> class A:
def a(self):
print ‘a’


>>> V={'A':A()}
>>> V.a()
a
balu
Igorek
name = ‘Daemon’
Хотелось получить с помощью name вызов class Daemon
name = getattr(your, ‘Daemon’)
print name
Это имелось в виду?
lukke

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
Вариант lukke, то что надо спасибо.
poltergeist
а у меня такой случай, что надо создавать объект по имени класса, который находится в отдельном модуле, и там locals() не видит все классы модуля, так что надо было использовать globals()


class_name = ‘Daemon’
class_inst = globals().get(class_name)
class_obj = class_inst()
j2a
Как-то вы сложно. Описание класса находится в модуле. Соответственно, применив 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
Спасибо за советы - направление понятно.
Jenyay
А как можно узнать какие классы есть в модуле?
j2a
dir(imported_module_obj). Только не классы, а объекты, определенные в данном модуле. А класс данный объект или нет – issublcass(yourobj, object) (полагая, что у тебя используются новые классы).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB