Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить тип по имени, Python v3.3.2 
V
    Опции темы
tishaishii
Дата 3.8.2013, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Хочу в настройках указывать имя класса драйвера, который следует использовать.
То есть:
Код

config = { "driver": "DriverA" } ;

class DriverA:
    def __init__( self , config ) :
        pass

class DriverB:
    def __init__( self , config ) :
        pass

obj = config[ "driver" ]( config )


Скажите, как получить тип по имени?

Это сообщение отредактировал(а) tishaishii - 3.8.2013, 15:35
PM MAIL ICQ Skype   Вверх
DmitriyM
Дата 5.8.2013, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 24.8.2012

Репутация: нет
Всего: нет



Код

type(obj)

PM MAIL WWW   Вверх
Backward
Дата 6.8.2013, 03:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.6.2007

Репутация: 2
Всего: 2



Код

import sys

class DriverA:
    def __init__(self, config):
        pass

class DriverB:
    def __init__(self, config):
        pass

def get_driver(config):
    module = sys.modules["__main__"]
    cls = getattr(module, config["driver"])
    return cls(config)

if __name__ == "__main__":
    config = {"driver": "DriverA"}

    print(get_driver(config))


Или более общий вариант.
Модуль drivers.py
Код

import sys

class DriverA:
    def __init__(self, config):
        pass


class DriverB:
    def __init__(self, config):
        pass

def get_driver_cls(driver):
    module = sys.modules[__name__]
    return getattr(module, driver, None)

Модуль, в котором используется класс драйвера
Код

from drivers import get_driver_cls
################################################################################

config = {"driver": "DriverA"}
################################################################################

if "__main__" == __name__:
    cls = get_driver_cls(config["driver"])
    if cls is not None:
        driver = cls(config)
        ...


Это сообщение отредактировал(а) Backward - 6.8.2013, 03:46
PM MAIL   Вверх
tishaishii
Дата 6.8.2013, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Большое спасибо.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0581 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.