Уведомления

Группа в Telegram: @pythonsu

#1 Июль 9, 2009 12:11:44

CJay
От:
Зарегистрирован: 2009-07-09
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Конструктор нужного класса по строке

Здравствуйте, заранее извиняюсь, не могу воспользоваться гуглом из-за того, что не знаю, по каким ключевым словам искать.
Юзаю SQLObject. Из http запроса вытаскиваю имя класса (строкой), который есть потомок SQLObject. Как, имея некоторую строку, создать объект нужного класса, чтобы в последствии вызвать у этого объекта метод select() для выбора всех объектов из бд? Может такое уже в самой SQLObject реализовано?



Офлайн

#2 Июль 9, 2009 12:20:48

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Конструктор нужного класса по строке

ну что-то вроде этого:

import model
obj = getattr(model, name)()
PS: предполагается что классы описаны у вас в модуле model



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано (Июль 9, 2009 12:22:35)

Офлайн

#3 Июль 9, 2009 12:37:58

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Конструктор нужного класса по строке

можно с помощью exec, например:

name = "str"
exec "s = " + name + "()"
print s.__class__
выведет <type ‘str’>



Офлайн

#4 Июль 9, 2009 13:45:27

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Конструктор нужного класса по строке

pasaranax
можно с помощью exec, например:
Скорее уж eval…
>>> name = "str"
>>> s = eval(name + '()')
>>> print s.__class__
<type 'str'>
Но пример PooH'а более безопасный. А то если name будет равно какому-нить 'lambda *a, **k: ', то сервер может не понять этого и обидеться…



Отредактировано (Июль 9, 2009 13:47:45)

Офлайн

#5 Июль 9, 2009 14:38:52

CJay
От:
Зарегистрирован: 2009-07-09
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Конструктор нужного класса по строке

Огромное СПАСИБО! То, что надо!



Офлайн

#6 Июль 10, 2009 12:09:42

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

Конструктор нужного класса по строке

думаю так будет более правильно:

from sqlobject import classregistry
soClass = classregistry.findClass(ClassName)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version