Отражение в Python намного проще и гибче, чем в Java.
Я рекомендую прочитать этот урок
Нет прямой функции (о которой я знаю), которая принимает полное имя класса и возвращает класс, однако у вас есть все части, необходимые для его создания, и вы можете соединить их вместе.
Один небольшой совет: не пытайтесь программировать в стиле Java, когда вы работаете на Python.
Если вы сможете объяснить, что именно вы пытаетесь сделать, возможно, мы сможем помочь вам найти более питонический способ сделать это.
Вот функция, которая делает то, что вы хотите:
def get_class( kls ):
parts = kls.split('.')
module = ".".join(parts[:-1])
m = __import__( module )
for comp in parts[1:]:
m = getattr(m, comp)
return m
Вы можете использовать возвращаемое значение этой функции, как если бы это был сам класс.
Вот пример использования:
>>> D = get_class("datetime.datetime")
>>> D
<type 'datetime.datetime'>
>>> D.now()
datetime.datetime(2009, 1, 17, 2, 15, 58, 883000)
>>> a = D( 2010, 4, 22 )
>>> a
datetime.datetime(2010, 4, 22, 0, 0)
>>>
Как это работает?
Мы используем __import__для импорта модуля, содержащего класс, что требовало, чтобы мы сначала извлекли имя модуля из полного имени. Затем импортируем модуль:
m = __import__( module )
В этом случае mбудет относиться только к модулю верхнего уровня,
Например, если ваш класс живет в foo.bazмодуле, тогда mэто будет модуль. foo
Мы можем легко получить ссылку на foo.bazиспользованиеgetattr( m, 'baz' )
Чтобы перейти от модуля верхнего уровня к классу, необходимо рекурсивно использовать gettatrчасти имени класса
Скажем, например, если ваше имя класса, foo.baz.bar.Modelмы сделаем следующее:
m = __import__( "foo.baz.bar" ) #m is package foo
m = getattr( m, "baz" ) #m is package baz
m = getattr( m, "bar" ) #m is module bar
m = getattr( m, "Model" ) #m is class Model
Вот что происходит в этом цикле:
for comp in parts[1:]:
m = getattr(m, comp)
В конце цикла mбудет ссылка на класс. Это означает, что mна самом деле это класс itslef, вы можете, например,:
a = m() #instantiate a new instance of the class
b = m( arg1, arg2 ) # pass arguments to the constructor
importlib.import, который был перенесен с python 3 на 2.7 ( docs.python.org/2/library/importlib.html )