Я использую существующую библиотеку Django и создаю класс, который хотел бы быть абстрактным.
Допустим, речь идет о BaseFoo
.
В настоящее время реализация имеет базовый класс BaseFoo
.
Каждый раз, когда создается класс, расширяющий BaseFoo
, метакласс добавляет его в список классов.Он явно не добавляет BaseFoo
, выполняя жестко запрограммированный тест для имени класса:
if name not in ('BaseFoo',):
class_list.append(new_cls)
Я бы хотел написать что-то вроде:
class MyBaseFoo(BaseFoo):
class Meta:
abstract = True
И пусть метакласс пропустит все BaseFoo
абстрактные объекты.Поэтому я думаю, мне интересно, как Django делает то же самое с моделями и существует ли простой и элегантный способ сделать это самостоятельно.
Я просмотрел код, используемый Django для определения моделей, ноЯ мог бы использовать несколько указателей.Также, если есть еще более простой способ сделать это без необходимости использования class Meta
, я тоже открыт для этого.
Обратите внимание, что я не особенно взволнован этим решением:
class MyBaseFoo(BaseFoo):
abstract = True
class ActualFoo1(MyBaseFoo):
abstract = False
class ActualFoo2(MyBaseFoo):
abstract = False