【问题标题】:python import statementspython导入语句
【发布时间】:2011-08-04 16:33:38
【问题描述】:

我已经开始使用 Python 大约一个月了,我遇到了一些我想更好地理解的东西。跟进口有关。所以我有一个模块: root.core.connectivity

现在在这个模块中,我定义了一个类 Connectivity。这个模块还有一个 __main__ 仅用于测试目的(不确定这是否会产生任何差异)。

现在如果我这样做:

from root.core.connectivity import Connectivity as class_name

这很好,但是如果我尝试:

import root.core.connectivity.Connectivity as class_name

这将失败:

ImportError: No module named Connectivity

所以我的问题是,为什么它会失败,这两个语句之间有什么区别。

问候, 波格丹

【问题讨论】:

    标签: python


    【解决方案1】:

    import 接受一个模块。 from X import Y 接受 X 中的一个模块,而 Y 中该模块的任何元素。Connectivity 不是一个模块。

    【讨论】:

    • 注意:由于模块是一等值,您可以(有时会)通过from X import Y 从包(甚至子包)X 中导入模块Y。如果它本身不是一个完整的模块,那么在 __init__.py 中显式导入包内容是一个很好的理由。
    【解决方案2】:

    Connectivity 是在模块中定义的类,import 接受模块,使用 from-import 时可以导入模块的类。

    这个链接解释得很好 http://effbot.org/zone/import-confusion.htm

    【讨论】:

      【解决方案3】:

      root.core.connectivity 是一个模块,而 root.core.connectivity.Connectivity 是一个类。 要了解 import 和 from .. import 之间的区别,您可以在use the following link 找到:

      import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )*
      | "from" relative_module "import" identifier ["as" name]
        ( "," identifier ["as" name] )*
      | "from" relative_module "import" "(" identifier ["as" name]
        ( "," identifier ["as" name] )* [","] ")"
      | "from" module "import" "*"
      

      例如,您将“import”与模块一起使用,将“from ... import”与标识符一起使用 - 例如类、变量和其他模块。

      所以在第二种情况下,您可以执行以下操作:

      import root.core.connectivity as conn
      class_name = conn.Connectivity
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-04
        • 2022-10-13
        • 2023-02-15
        • 2010-12-14
        • 1970-01-01
        • 1970-01-01
        • 2015-11-05
        • 2016-05-01
        相关资源
        最近更新 更多