我是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
答案 0 :(得分:4)
Python不是Java。 A
和B
不是类。它们是模块。您需要单独导入它们。 (并且myLib
不是模块而是包。)
模块A
和B
本身可能包含类,这些类可能会也可能不会被称为A
和B
。你可以在模块中拥有尽可能多的类 - 甚至根本没有,因为很可能编写一个没有类的大型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