Объявление имени класса в переменной
Я создаю проект и пытаюсь объявить имя класса в переменной перед объявлением переменной.
Но когда я объявляю переменную как :-
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__})