在python中查找从给定基类派生的所有类

在python中查找从给定基类派生的所有类,python,django,Python,Django,我正在寻找一种方法来获取从Python中特定基类派生的所有类的列表 更具体地说,我使用的是Django,我有一个抽象的基本模型,然后是从该基类派生的几个模型 class Asset(models.Model): name = models.CharField(max_length=500) last_update = models.DateTimeField(default=datetime.datetime.now()) category = models.CharFi

我正在寻找一种方法来获取从Python中特定基类派生的所有类的列表

更具体地说,我使用的是Django,我有一个抽象的基本模型,然后是从该基类派生的几个模型

class Asset(models.Model):
    name = models.CharField(max_length=500)
    last_update = models.DateTimeField(default=datetime.datetime.now())
    category = models.CharField(max_length=200, default='None')

    class Meta:
        abstract = True

class AssetTypeA(Asset):
    junk = models.CharField(max_length=200)
    hasJunk =  models.BooleanField()

    def __unicode__(self):
        return self.junk

class AssetTypeB(Asset):
    stuff= models.CharField(max_length=200)

    def __unicode__(self):
        return self.stuff
我希望能够检测是否有人添加了新的AssetTypeX模型并生成适当的页面,但目前我正在手动维护一个列表,是否有办法确定从“资产”派生的任何东西的类名列表?

资产。
给出了
资产的直接子类,但这是否足够取决于直接部分对您来说是否是一个问题——如果您希望所有子代都达到任意数量的级别,则需要递归扩展,例如:

def descendants(aclass):
  directones = aclass.__subclasses__()
  if not directones: return
  for c in directones:
    yield c
    for x in descendants(c): yield x

您的示例表明,您只关心类直接子类化
资产
,在这种情况下,您可能不需要这种额外的扩展级别。

没有想到这一点,但我需要知道哪些文件需要grep,并不是所有的模型都在同一个文件中,我不想对整个源代码树进行grep。您可以通过使用自定义元类来教父类跟踪其子类声明的过程,但是对于一些听起来有点琐碎的东西来说,这确实是一个很大的工作。我只需要直接子类的副本,所以这个工作非常完美,谢谢。