2

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

myLib/
    __init__.py
    A.py
    B.py

driver.py

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

import myLib
tmp = myLib.A()

尝试运行它时出现以下错误。AttributeError:“模块”对象没有属性 A

当我这样做时 Eclipse 不会抱怨,事实上当我键入 myLib.A 时自动完成显示 A。

当我导入一个模块而不是其中的任何类时,这意味着什么?

谢谢

4

2 回答 2

4

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

模块AB本身可能包含类,这些类可能被称为也可能不被称为Aand B。您可以在一个模块中拥有任意数量的类 - 甚至根本没有,因为很可能编写一个没有类的大型 Python 程序。

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

如果你这样做from myLib import A了,你现在已经将模块 A导入到当前命名空间中。但是同样,它的任何类仍然必须通过A名称来引用:所以如果你确实有一个类A,你可以通过A.A().

第三个选项是 do from myLib.A import A,它确实将 A导入到您当前的命名空间中。在这种情况下,您可以调用A()来实例化该类。

于 2013-03-10T19:37:30.417 回答
1

你需要做

from mylib import A

因为A不是__init__.pyinside的属性mylib

当你这样做import mylib__init__.py

看我的回答。 关于包

于 2013-03-10T19:21:04.513 回答