Подтвердить что ты не робот

Как динамически создавать экземпляр класса в python?

У меня есть список имен классов и вы хотите динамически создавать их экземпляры. например:

names=[
'foo.baa.a',
'foo.daa.c',
'foo.AA',
 ....
]

def save(cName, argument):
 aa = create_instance(cName) # how to do it?
 aa.save(argument)

save(random_from(names), arg)

Как динамически создавать экземпляры в Python? спасибо!

4b9b3361

Ответ 2

Предполагая, что вы уже импортировали соответствующие классы, используя что-то вроде

from [app].models import *

все, что вам нужно сделать, это

klass = globals()["class_name"]
instance = klass()

Ответ 3

Вы можете использовать встроенный оператор python eval() для создания экземпляров ваших классов. Вот так:

aa = eval(cName)()

Ответ 4

Вы можете часто полностью исключить часть обработки строк.

import foo.baa 
import foo.AA
import foo

classes = [ foo.baa.a, foo.daa.c, foo.AA ]

def save(theClass, argument):
   aa = theClass()
   aa.save(argument)

save(random.choice(classes), arg)

Обратите внимание, что мы не используем строковое представление имени класса.

В Python вы можете просто использовать сам класс.

Ответ 5

Это сработало для меня:

from importlib import import_module

class_str: str = 'A.B.YourClass'
try:
    module_path, class_name = class_str.rsplit('.', 1)
    module = import_module(module_path)
    return getattr(module, class_name)
except (ImportError, AttributeError) as e:
    raise ImportError(class_str)