当前位置: 首页 > 面试题库 >

Django抽象模型vs简单Python mixins vs Python ABC

傅越
2023-03-14
问题内容

这是我的另一个问题提示的一个问题。

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

现在的问题是:为什么Django用这种方式解决它?为什么需要这种特殊的“抽象基类”模型?为什么不通过仅继承对象类并将其与现有模型混合来进行模型混合?还是可以通过Python
ABC的任务来做到这一点?(请注意,我对Python中的ABC类不是很熟悉,我的无知可能显示在这里)


问题答案:

我会尽量简短些,因为这很容易变成冗长的异味:

ABC之所以出现是因为它们仅在Python 2.6中引入,并且Django开发人员为Python版本支持设置了路线图(2.3支持仅在1.2中被删除)。

至于对象继承混合器,它们在Python方面要比在减少可读性方面更具Python风格。DjangoModelBaseModel对象使用元类,该元类实际上在初始化时分析定义的模型属性,并Model._meta使用字段,Meta选项和其他属性填充。对于两种类型的模型都可以重用该框架。这也允许Django防止继承模型来覆盖抽象模型字段。

我能想到的原因还有很多,它们全都是次要的,但是它们加起来会使当前的实现变得更加Pythonic。但是,使用对象继承混合器并没有本质上的错误。



 类似资料:
  • 问题内容: 除了语法外,使用django抽象模型和对django模型使用纯Python继承之间有什么区别?利弊? 更新:我认为我的问题被误解了,并且我收到了关于抽象模型与从django.db.models.Model继承的类之间的区别的答复。 我实际上想知道从Django抽象类(元:abstract = True)继承的模型类与从诸如“ object”(而不是models.Model)继承的普通P

  • 本文向大家介绍简单了解django orm中介模型,包括了简单了解django orm中介模型的使用技巧和注意事项,需要的朋友参考一下 什么是中介模型 中介模型针对的是ManyToMany(多对多)的时候第三张表的问题, 中介模型其实指的就是我们不通过Django创建第三张表,如果自己不创建第三张表,而是由django给我们创建,那就不存在中介模型 中介模型示例 普通的ManyToMany示例 这

  • 抽象异步模型 对回调模型抽象出异步接口Async。 只有一个方法的接口通常都可以使用闭包代替,区别在于interface引入新类型,闭包则不会。如果说thunkify依赖了参数顺序的弱约定,Async相对严肃的依赖了类型。 <?php interface Async { public function begin(callable $callback); } // AsyncTask符

  • 问题内容: 我是的新手,也许我听不懂。 假设我有1000 ()。我想向所有的学生展示。据我了解,我必须创建它并设置为。因此,我们可以认为是我们与表之间的“适配器” 。在互联网上,我找到了这样的示例实现: 问题是,如果有1000个学生(行)和4个字段(列),我们将运行此开关4000次。请说明我做错了什么,或告诉我们更好的解决方案。 问题答案: 有1000个学生(行)和4个字段(列),我们将运行此开关

  • 我有一个用户的Entity-DTO转换器,如下所示: 我有很多Entity-DTO要管理,所以我想像这样抽象转换器 我的问题是:我必须放置什么而不是???

  • 我正在重构我的代码,所以我需要做出关于接口或抽象类的决定。我有基类Player和继承基类的类,称为VideoPlayer、MusicPlayer等。基类有抽象方法,没有实现(Play)。那么,最好的方法是什么?将Play放在接口中或将其留在抽象类中。在MusicPlayer中播放与在VideoPlayer中的播放器不同。我是用C#实现的。

  • 本文向大家介绍Django框架模型简单介绍与使用分析,包括了Django框架模型简单介绍与使用分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Django框架模型简单介绍与使用。分享给大家供大家参考,具体如下: ORM介绍 ORM Object relational mapping 对象关系映射 把面向对象中的类和数据库表一一对应起来,通过操作类和对象,对数据库表实现数据的增删改查等操

  • 在这个话题上有数百个类似的问题。但我仍然感到困惑,我希望得到专家的建议。 我们正在使用ASP开发一个应用程序。NETMVC4和EF5以及我们的是DB优先的方法。 我们在一个单独的项目中有数据层,该项目是一个类库,包含其中定义的所有实体。然后是用所有存储库和域模型定义的业务层(这是正确使用的术语)。然后是表示层。 目前我们还没有定义任何视图模型,我们使用的是与视图模型相同的BL域模型。在这种方法中,