gpt4 book ai didi

django.db.models.loading.get_model 与导入

转载 作者:行者123 更新时间:2023-12-04 00:50:25 24 4
gpt4 key购买 nike

使用类似的东西有什么缺点吗

from django.db.models.loading import get_model

def get_something():
model = get_model('app', 'Model')
return model.something()

代替
from app.models import Model

def get_something():
return Model.something()

第二个例子会导致循环依赖,而第一个例子不会,但第二个例子更常见。

更新 :如果第二个示例位于名为 Other_Model 的模型中,并且模型也导入了 Other_Model - 一个简单的循环导入,则会出现循环依赖错误。

最佳答案

一般来说,get_model功能是为需要动态加载模型的时候保留的(比如,如果你不知道是否有人会通过 myapp.Person、myapp.Place 或 myapp.Thing 传递服务,并且它们都具有相同的界面)。我什至会说任何其他用途都应该在代码审查中自动标记,如果没有其他原因,除了它引入了意外的事实。

至于内部机制,确实没有实质性区别。不可避免的get_model版本将调用 __import__ .也就是说,it is not without bugs .实际使用import语句将避免这个问题。

至于 MRO 问题,循环导入无法通过重构解决的情况很少见。如果您有两个相互依赖的应用程序,它们会导致循环导入,那么您真的需要重新考虑这些应用程序。 (我的猜测是你真的在处理一个应用程序。)

关于django.db.models.loading.get_model 与导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16804044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com