python - Django 抽象模型与简单的 Python 混合与 Python ABCs

标签 python django

这是another question提示的问题来 self 。

Django 提供 Abstract base classes功能(这与 Python 中的 ABC 类不同?),以便可以创建一个可以从中继承的模型(Django 的 models.Model),但该模型在数据库中没有实际的表。通过在模型的元类中设置“抽象”属性来触发此行为。

现在问题来了:Django 为什么要这样解决?为什么需要这种特殊的“抽象基类”模型?为什么不通过继承对象类并将其与现有模型混合来创建模型混合?或者这也可以通过 Python ABC 的任务来实现吗? (请注意,我对 Python 中的 ABC 类不是很熟悉,我的无知可能会在这里表现出来)

最佳答案

我会尽量简短,因为这很容易变成冗长的谩骂:

ABCs 已经出来了,因为它们只在 Python 2.6 中引入,Django 开发人员有一个 Python 版本支持的路线图(2.3 支持只在 1.2 中被删除)。

至于对象继承的 mixin,它们在很多方面都不像 Pythonic,而不仅仅是降低可读性。 Django 为 Model 对象使用 ModelBase 元类,它实际上在初始化时分析定义的模型属性,并使用字段填充 Model._metaMeta 选项和其他属性。为两种类型的模型重用该框架是有意义的。这也允许 Django 防止抽象模型字段被继承模型覆盖。

还有很多我能想到的原因,它们本身都是次要的,但它们加起来使当前的实现更加 Pythonic。不过,使用对象继承混入本身并没有错。

关于python - Django 抽象模型与简单的 Python 混合与 Python ABCs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3263417/

相关文章:

python - 在linux上的anaconda虚拟环境中下载spacy ray

python - django:胖模型和瘦 Controller ?

python - Django 应用程序消耗服务器中的内存

python - 如何找到我的网络托管 django 应用程序的访问者数量?

php - 使用 PHP 创建 MongoDB 的 ISODate

python - 如何在python中的opencv中检测药丸盒的细胞轮廓?

python - 导入错误: Library not loaded for f2py

python - 将字典排序到列表中

django - 删除字符串列表周围的双引号

python - 属性错误: 'module' object has no attribute 'register_success'