我正在使用现有的 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