【问题标题】:Python, is "import *" bad if I am importing all classes / functions from a file? [duplicate]Python,如果我从文件中导入所有类/函数,“import *”是否不好? [复制]
【发布时间】:2015-06-20 03:31:14
【问题描述】:

我听说“import *”不是好的做法。

因此,例如,在一个 Django 应用程序中,我创建了 5 个模型,并且我想要为每个模型创建一个管理页面,我的 admin.py 文件仍然被认为是不好的做法吗?

from myapp.models import *

edit:这是我自己的代码,我知道我想从文件中导入所有内容。

【问题讨论】:

  • 这是bug的来源;您不知道仅从该行将导入哪些名称。请参阅this recent question,其中问题出在from scipy import * 行。
  • 嗯,这就是我的问题的重点,我知道我要导入什么,因为它是我自己的代码。
  • 但是随着项目的发展,您以后还会记得您在哪里使用import *吗?
  • 可能,我每天都在使用它,并且对数据模型有很好的了解。
  • 如果您是唯一位使用代码的人,那么您做什么并不重要。如果其他人正在使用该代码,您确定他们会记得import * 的使用位置吗?

标签: python import


【解决方案1】:

是的。问题是将来可能会添加更多可能导致意外问题的代码;比如命名冲突。

我通常会选择:

from myapp.models import MyModel
from myapp.models import MySecondModel

另一种选择是:

from myapp.models import (MyModel, MySecondModel)

编辑:

正如@kalhartt 指出的那样,您也可以简单地这样做。

from myapp import models

如果你必须导入很多类,然后使用models.MyModel 等。

【讨论】:

  • 我可以看到,但实际上我遇到了相反的问题,我添加了一个新模型,并添加了一个管理页面,但忘记了导入。这在当时相当明显。
  • 是的,这实际上就是这种方法的优势。如果您忘记添加某些内容,那么缺少的内容将相当明显。
  • @wobbily_col 在您描述的用例中,我更喜欢from myapp import models 或(很少)为简洁起见import myapp.models as md
  • 我更新了我的答案并给了你@kalhartt的信用。 =]
  • @wobbily_col:是的,不同之处在于您在代码中不使用 MyModel,而是使用 models.MyModel。
猜你喜欢
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多