【问题标题】:Importing with dot notation使用点符号导入
【发布时间】:2018-01-17 12:55:11
【问题描述】:

谁能给我解释一下? 当您导入 Tkinter.Messagebox 时,这实际上是什么意思(点表示法)? 我知道您可以导入Tkinter,但是当您导入Tkinter.Messagebox 时,这实际上是什么?是类中的类吗?

我是 Python 新手,点符号有时会让我感到困惑。

【问题讨论】:

  • 这是模块内的一个类。这意味着只有 Messagebox 类可供您使用,而 import Tkinter 将导入所有类。我建议在 python IDLE 中尝试这个并使用它。
  • 如果你阅读了文档,我希望你能找到一个很好的解释,而不是在这里
  • @Vinny:它不是模块内的类。它是包中的一个模块。
  • 请检查大小写,任何地方都没有Tkinter.Messagebox

标签: python module python-import


【解决方案1】:

import a.bb 导入命名空间a,您可以通过a.b 访问它。请注意,这仅在 b 是一个模块时才有效。 (例如,import urllib.request 在 Python 3 中)

from a import b 但是将b 导入到当前命名空间,b 可以访问。这适用于类、函数等。

使用from-import时要小心:

from math import sqrt
from cmath import sqrt

两个语句都将函数 sqrt 导入到当前命名空间中,但是,第二个 import 语句会覆盖第一个。

【讨论】:

  • "import a.bb 导入命名空间 a" 这很有帮助。我假设当我导入a 时,a 的所有“子模块”都会自动导入,但在 Python 中似乎并非如此——您需要专门导入子模块。但只是有时?与它作为属性/属性与新模块/文件有什么关系?
【解决方案2】:

当您将那个点放在您的导入中时,您指的是您要从中导入的包/文件中的某些内容。 您导入的内容可以是类、包或文件,每次添加一个点时,您都​​会询问它之前的实例内部的内容。

parent/
    __init__.py
    file.py
    one/
        __init__.py
        anotherfile.py
    two/
        __init__.py
    three/
        __init__.py

例如,您有这个,当您传递import parent.file 时,您实际上是在导入另一个可能包含类和变量的python 模块,因此要引用该文件中的特定变量或类,您可以使用from parent.file import class

这可能会更进一步,在另一个包中导入一个包装或在一个包中的一个文件中导入一个类等(如import parent.one.anotherfile) 欲了解更多信息,请阅读Python documentation 了解此内容。

【讨论】:

  • import parent.file.class 没有意义:这种形式的 import 语句只导入模块和包。 (例如,尝试import decimal.Decimal。它不起作用。)
  • @MarkDickinson 我编辑了它,现在可以使用了吗?我试过不包括from .. import ..,因为他是初学者。
  • @GeekyMo 我明白你在告诉我什么,但是当我导入 Tkinter 时,我还可以使用一些功能。在你的示例中,如果我导入 parent,我将一无所获。我的意思是 parent 只是一个文件夹,对吗?里面什么都没有。那么 Tkinter 是一个包还是一个模块?
  • @KwnstantinosNikoloutsos 如果你导入一个包(父级),你实际上导入了它的 __init__ 文件,它表示该文件夹是一个 python 包,所以如果你导入 Tkinter,它会导入`__init__`文件在 Tkinter 包文件夹中(可能包含也可能不包含函数),当您在其中导入诸如 from Tkinter import func 之类的内容时,它会先搜索`__init__`,然后再查找该包中的模块。
  • Tkinter,是一个文件夹,其中包含一个__init__.py 来告诉python它是一个包,关于它的类型,它取决于,如果你import Tkinter,你实际上在里面导入__init__ 模块,如果你这样做 from Tkinter import moduleimport Tkinter.module (在某些情况下)你正在将 Tkinter 视为一个 python 模块包。
猜你喜欢
  • 2015-09-09
  • 2015-04-02
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2018-08-13
相关资源
最近更新 更多