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

时间:2009-12-31 17:34:13

标签: python django

我正在寻找一种方法来获取从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模型并生成了相应的页面,但是目前我手动维护一个列表,有没有办法确定任何派生的类名列表“资产“?

1 个答案:

答案 0 :(得分:9)

Asset.__subclasses__()提供了Asset立即子类,但这是否足够取决于 immediate 部分是否对您有用 - 如果你想让所有后代都达到任意数量的级别,你需要递归扩展,例如:

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

您的示例建议您只关心直接继承Asset的类,在这种情况下,您可能不需要这种额外的扩展级别。