I would use a metaclass to register every instance of a database model, with a dictionary to get a class, given a name:
class Models(type):
classes = {}
def __new__(cls, clsname, bases, attrs):
newclass = super(Models, cls).__new__(cls, clsname, bases, attrs)
Models.register(newclass) # here is your register function
return newclass
@classmethod
def register(cls, new_class):
Models.classes[new_class.__name__] = new_class
class MyClass(metaclass=Models):
def __init__(self, arg1, arg2, arg3):
...
values = ("a", "b", "c")
className = "MyClass"
instance = Models.classes.get(className)(*values)