【问题标题】:Python: Importing an "import file"Python:导入“导入文件”
【发布时间】:2011-06-01 18:52:26
【问题描述】:

我正在导入很多不同的脚本,所以在我的文件顶部它会被导入语句弄得杂乱无章,即:

from somewhere.fileA import ...
from somewhere.fileB import ...
from somewhere.fileC import ...
...

有没有办法将所有这些移动到其他地方,然后我所要做的就是导入该文件,这样它只是一个干净的导入?

【问题讨论】:

    标签: python python-import


    【解决方案1】:

    我强烈建议您不要这样做。你正在做global include file mistake again。尽管只有一个模块正在导入所有模块(与所有模块都导入全局模块相反),但剩下的一点是,如果有正当理由将所有这些模块收集到一个通用名称下,那很好。如果没有理由,那么它们应该作为单独的包含保存。原因是文档。如果我打开你的文件,只看到一个导入,我不会得到任何关于导入什么以及它来自哪里的信息。另一方面,如果我有进口清单,我一眼就知道需要什么,不需要什么。

    另外,我认为您正在犯另一个重要错误。当你说

    from somewhere.fileA import ...
    from somewhere.fileB import ...
    from somewhere.fileC import ...
    

    我假设您正在导入一个类,例如,像这样

    from somewhere.fileA import MyClass
    

    这是错误的。这种替代解决方案要好得多

     from somewhere import fileA 
    
     <later>
    
     a=fileA.MyClass()
    

    为什么?两个原因:第一,命名空间。如果您有两个具有名为 MyClass 的类的模块,则会发生冲突。第二,文档。假设您使用第一个选项,我在您的代码中找到以下行

     a=MyClass()
    

    现在我不知道这个 MyClass 是从哪里来的,我必须在你所有的文件中搜索才能找到它。使用模块名称限定它可以让我立即了解它的来源,并立即通过 /search 找到来自 fileA 模块的内容在您的程序中使用的位置。

    最后一点:当您说“fileA”时,您犯了一个错误。有模块(或包),而不是文件。模块映射到文件,包映射到目录,但它们也可能映射到 egg 文件,你甚至可以创建一个根本没有文件的模块。这是概念的命名,是横向问题。

    【讨论】:

      【解决方案2】:

      当然有;只需在主文件所在的同一目录中创建一个名为 myimports.py 的文件,然后将导入的文件放在那里。然后你可以在你的主脚本中简单地使用from myimports import *

      【讨论】:

      • 请注意,除非在特殊情况下,并且如果您可以 100% 保证不会隐藏一个名称,否则不应这样做。见docs.python.org/howto/doanddont.html#from-module-import
      • 当然可以;这不是我在任何情况下都提倡的编码实践,但我有资格质疑发帖人的意图吗? :)
      • 用“X到底是什么?...啊,是的。你可以做得更好像这样:...”
      • 所以我应该坚持使用可能的十几个导入语句?大声笑因为我导入的每个附加文件就像我的主脚本的插件。
      • 在试图理解别人的代码时,一打导入确实不错。
      猜你喜欢
      • 2018-08-19
      • 1970-01-01
      • 2020-03-29
      • 2021-09-27
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多