Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 13, 2007 14:17:40

Igorek
От:
Зарегистрирован: 2006-12-08
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование строки в имя класса

есть класс

class Daemon:
def prop(self):
pass


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

Как это сделать. Объясните пожалуйста



Офлайн

#2 Дек. 13, 2007 15:01:36

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование строки в имя класса

Я делаю через словарь :


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


>>> V={'A':A()}
>>> V.a()
a



Офлайн

#3 Дек. 13, 2007 15:07:08

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование строки в имя класса

Igorek
name = ‘Daemon’
Хотелось получить с помощью name вызов class Daemon
name = getattr(your, ‘Daemon’)
print name
Это имелось в виду?



Офлайн

#4 Дек. 13, 2007 15:12:19

lukke
От:
Зарегистрирован: 2007-01-01
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование строки в имя класса


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

Может выглядит не очень.



Офлайн

#5 Дек. 13, 2007 15:46:24

Igorek
От:
Зарегистрирован: 2006-12-08
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование строки в имя класса

Вариант lukke, то что надо спасибо.



Офлайн

#6 Дек. 13, 2007 16:03:42

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование строки в имя класса

а у меня такой случай, что надо создавать объект по имени класса, который находится в отдельном модуле, и там locals() не видит все классы модуля, так что надо было использовать globals()


class_name = ‘Daemon’
class_inst = globals().get(class_name)
class_obj = class_inst()



Офлайн

#7 Дек. 13, 2007 19:40:27

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Преобразование строки в имя класса

Как-то вы сложно. Описание класса находится в модуле. Соответственно, применив 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>’



Офлайн

#8 Дек. 14, 2007 17:26:00

Igorek
От:
Зарегистрирован: 2006-12-08
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование строки в имя класса

Спасибо за советы - направление понятно.



Офлайн

#9 Дек. 14, 2007 17:40:34

Jenyay
От:
Зарегистрирован: 2007-08-10
Сообщения: 173
Репутация: +  1  -
Профиль   Отправить e-mail  

Преобразование строки в имя класса

А как можно узнать какие классы есть в модуле?



Офлайн

#10 Дек. 14, 2007 18:44:26

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Преобразование строки в имя класса

dir(imported_module_obj). Только не классы, а объекты, определенные в данном модуле. А класс данный объект или нет – issublcass(yourobj, object) (полагая, что у тебя используются новые классы).



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version