You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码获取Django模型对象的继承来源?

如何获取Django模型的继承来源?

当然可以啦!Django的模型类本质上还是Python类,所以我们可以利用Python本身的类属性或者标准库工具来轻松获取它的继承关系。针对你给出的RealObj示例,这里有几种实用的实现方式:

获取直接父类

如果只需要知道直接父类(也就是RealObj直接继承的SWT),可以使用Python类的__base__或__bases__属性:

  • __base__返回单个直接父类(适用于单继承场景,你的例子就是这种情况)
  • __bases__返回一个元组,包含所有直接父类(支持多继承)

示例代码:

# 获取直接父类
direct_parent = RealObj.__base__
print(direct_parent.__name__)  # 输出: SWT

# 或者用__bases__,单继承下取第一个元素即可
direct_parent_from_bases = RealObj.__bases__[0]
print(direct_parent_from_bases.__name__)  # 同样输出: SWT

获取完整的继承链

如果需要查看所有继承层级(包括抽象基类CDate,甚至Django的models.Model),可以使用标准库inspect中的getmro()方法,它会返回按方法解析顺序排列的类元组:

示例代码:

import inspect

# 获取完整继承链
inheritance_chain = inspect.getmro(RealObj)

# 遍历输出所有类的名称
for cls in inheritance_chain:
    print(cls.__name__)
# 输出顺序为: RealObj, SWT, CDate, models.Model, object

如果你只想筛选出自定义的模型父类(排除Django自带的models.Model和Python的object),可以做个简单的过滤:

import inspect
from django.db import models

custom_parents = [cls for cls in inspect.getmro(RealObj) if cls not in (models.Model, object)]
# 输出自定义父类列表: [RealObj, SWT, CDate]
# 若要排除自身,取切片即可: custom_parents[1:] → [SWT, CDate]

内容的提问来源于stack exchange,提问作者user2194805

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:10:34