Вам просто нужно использовать exec
: он поддерживает динамическое c выполнение кода Python.
import re
def string_to_object(str_class, *args, **kwargs):
exec(str_class)
class_name = re.search("class ([a-zA-Z_][a-zA-Z0-9_]*)", str_class).group(1)
return locals()[class_name](*args, **kwargs)
Вы можете использовать функцию string_to_object
для автоматического создать объект указанного класса:
my_class = '''
class A:
def print(self):
print("Hello World")
'''
a = string_to_object(my_class)
a.print() # Hello World
Вы также можете построить что-то более сложное:
my_class = '''
class B:
def __init__(self, a, b, c=0, d=1):
self.a = a
self.b = b
self.c = c
self.d = d
'''
b = string_to_object(my_class, 4, 5, c=7)
print(b.a) # 4
print(b.b) # 5
print(b.c) # 7
print(b.d) # 1
А также:
class C:
pass
my_class = '''
class D(C):
pass
'''
d = string_to_object(my_class)