Объявление имени класса в переменной

Я создаю проект и пытаюсь объявить имя класса в переменной перед объявлением переменной.

Но когда я объявляю переменную как :-

klassName = MyClass

class klassName(models.Model):
    title = models.CharField(max_length=30)

тогда он присваивает с KlassName не той переменной, на которую я ссылался.

Тогда я попробовал :-

className = 'MyClass'
klass = type(className, (object,), {'msg': 'foobarbaz'})
x = className()

class x():
    title = models.CharField(max_length=30)

он показывает

NameError: имя 'className' не определено

Я не нашел никакой документации по декларированию.

Я сделал все в соответствии с This. Но ни один из них не сработал для меня.

Любая помощь будет очень признательна. Заранее благодарю.

в вашем примере:

klassName = MyClass

class klassName(models.Model):
    title = models.CharField(max_length=30)

klassName ссылается на ничто, потому что MyClass не определен. Вы можете сказать:

MyClass = klassName

class klassName(models.Model):
    title = models.CharField(max_length=30)

Для динамического создания класса можно использовать форму трех аргументов type. Чтобы также динамически создать переменную или член модуля с тем же именем, вы можете использовать globals() для динамического создания переменных

globals()['className'] = type('className', (object,), {'foo': 'bar'})

Создать модель динамически может быть немного сложнее, но для удобства можно использовать абстрактный базовый класс для определения всех полей/методов

class Base(models.Model):
    name = models.CharField(max_length=100)

    class Meta:
        abstract = True

globals()['className'] = type('className', (Base, ), {'__module__': Base.__module__})
Вернуться на верх