在python中导入模块意味着什么?

时间:2013-03-10 19:19:31

标签: python

我是python的新手,发现我可以导入一个模块而不导入其中的任何类。我有以下结构 -

myLib/
    __init__.py
    A.py
    B.py

driver.py

在driver.py内部,我执行以下操作 -

import myLib
tmp = myLib.A()

尝试运行它时出现以下错误。     AttributeError:'module'对象没有属性A

当我这样做时Eclipse不会抱怨,实际上当我输入myLib.A时,自动完成功能会显示A.

导入模块而不是导入模块中的任何类时,这是什么意思?

谢谢

P

2 个答案:

答案 0 :(得分:4)

Python不是Java。 AB不是类。它们是模块。您需要单独导入它们。 (并且myLib不是模块而是包。)

模块AB本身可能包含类,这些类可能会也可能不会被称为AB。你可以在模块中拥有尽可能多的类 - 甚至根本没有,因为很可能编写一个没有类的大型Python程序。

要回答您的问题,导入myLib只需将名称myLib放在当前名称空间中。 __init__.py中的任何内容都将被执行:如果该文件本身定义或导入任何名称,它们将作为myLib的属性提供。

如果您执行from myLib import A,则现在已将模块 A导入当前命名空间。但同样,它的任何类仍然必须通过A名称引用:所以如果你在那里有一个类A,你可以通过A.A()实例化它。

第三个选项是执行from myLib.A import A,它会将 A导入当前命名空间。在这种情况下,您只需调用A()来实例化该类。

答案 1 :(得分:1)

你需要做

from mylib import A

因为A不是__init__.py

mylib的属性

执行import mylib时,会导入__init__.py

看我的回答。 About packages