Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Получить тип по имени


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

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

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

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

obj = config[ "driver" ]( config )


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

Автор: DmitriyM 5.8.2013, 19:41
Код

type(obj)

Автор: Backward 6.8.2013, 03:12
Код

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)
        ...

Автор: tishaishii 6.8.2013, 11:12
Большое спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)