【发布时间】:2020-09-16 20:51:28
【问题描述】:
我正在开发一个 django 应用程序,我想创建一个始终应用于模型定义的 mixin。 mixin 添加的功能对于这个问题并不重要。
但是,我需要能够检索从该 mixin 继承的所有类定义的列表。这些类可以在 django 项目的不同应用中。
目前我找到的可能答案是:
How to find all the subclasses of a class given its name?
How to auto register a class when it's defined
我主要想知道实现这一目标的最佳方法是什么。
【问题讨论】:
-
您想在代码中执行此操作,例如您的应用程序需要这样做,或者您想检查这些类,如果以后我会做一个 git grep MixinName
-
基本上没有办法以编程方式做到这一点,因为可能有无数其他模块导入和使用该 mixin,而您的程序无法真正发现它们.要“手动”执行此操作,好的 IDE 会有所帮助。
-
在这种情况下,mixin 只会应用于实际的 django 模型定义,我编辑了问题以反映这一点。这会影响类的可发现性吗?
-
那么您是否尝试了链接中的
__subclasses__?或者通过定义__init_subclass__? -
我确实尝试过
__subclasses__,但是它只能引用在使用它的代码部分中实际导入的模型。因此,虽然在大多数情况下就足够了,但在某些情况下,项目中的某些子类被跳过了。