Я не смотрел на то, что делает Django, когда вы устанавливаете абстрактное True в бэкэнде, но я поиграл с этим и обнаружил, что это работает. Обратите внимание, это работает только в Python 2.6
from abc import ABCMeta
class ABClass():
__metaclass__ = ABCMeta
class ConcreteClass1(ABClass):
pass
class ConcreteClass2(ABClass):
pass
print ABClass.__subclasses__()
Результаты в
[<class '__main__.ConcreteClass1'>, <class '__main__.ConcreteClass2'>]
Без использования ABCMeta и __metaclass__
вы получите пустой список.
Вы можете прочитать хорошее описание того, что происходит здесь . Единственная проблема с этим, и я не уверен, повлияет ли это на вас, я не могу понять, почему, когда я создаю экземпляр ABClass, он не может найти подклассы. Возможно, если немного поиграть и почитать документ, это может вас куда-нибудь привести.
Дайте мне знать, как это работает для вас, так как мне искренне любопытен правильный ответ.