代码之家  ›  专栏  ›  技术社区  ›  JPG

如何从子类中获取抽象类名

  •  1
  • JPG  · 技术社区  · 6 年前

    我有以下几种型号,

    class FooBarAbstract(models.Model):
        foobar = models.IntegerField()
    
        class Meta:
            abstract = True
    
    
    class Foo(FooBarAbstract):
        foo = models.IntegerField()
    
    
    class Bar(FooBarAbstract):
        bar = models.IntegerField()
    



    如何获取抽象类名( FooBarAbstract )通过使用子类( Foo Bar )或者他们的目标?

    3 回复  |  直到 6 年前
        1
  •  2
  •   blhsing    6 年前

    您可以从类的 __bases__

    假设派生类始终仅从一个类继承,则可以使用以下方法获取基类的名称:

    class Foo(FooBarAbstract):
        def __init__(self):
            print(self.__class__.__bases__[0].__name__)
    

    Foo() 将输出: FooBarAbstract

    请注意 mro __mro__ 属性不太适合您的用途,因为它们不仅包含父类,而且还包含当前类和父类的父类,因此在获取父类之前必须跳过它们。

        2
  •  2
  •   mastisa    6 年前

    通过使用python __bases__

    class Foo():
        pass
    
    class Bar(Foo):
        pass
    
    bb = Bar
    bb.__bases__[0].__name__
    # 'Foo'
    

        3
  •  0
  •   Vineeth Sai    6 年前

    尝试这样的方法,这是一个示例,您可以根据Django层次结构更改索引。

    class Foo():
        pass
    
    class Bar(Foo):
        pass
    
    class Eggs(Foo):
        pass
    

    Eggs.mro()[-2].__name__ # change your index accordingly to your class inheritance structure.

    返回Foo

    有关信息: