Python命名空间和模块

Python Namespaces and Modules

如果我使用如下语法导入python模块:

1
import my_module

稍后,我可以使用一些最简单的命令来了解模块是什么、位于何处等。例如:

1
print(my_module)

输出:模块'my'u module'来自'my'u module.py'

1
dir(my_module)

输出:['myclass'、'builtins'、'doc'、'file'、'name'、'package'、'math'、'os'、'sys']

我甚至可以通过以下方法找到模块的绝对路径:

1
print os.path.abspath( my_module.__file__  )

输出:/users/julia/documents/classes/my_module.py

但如果不是导入"我的模块",我将使用:

1
from my_module import MyClass

我所能做的就是:

1
print MyClass

哪个输出:my_module.myclass

我确实看到我的课程来自我的模块文件。但不幸的是,这是我所能得到的,因为我用来获取模块信息的命令都不起作用。以下是用途及其输出:

1
2
3
4
5
print dir(my_module.MyClass)  NameError: name 'my_module' is not defined

print dir(my_module)  NameError: name 'my_module' is not defined

print my_module  name 'my_module' is not defined

在跟踪导入的模块时应该使用什么命令

1
from my_module import MyClass

语法?


问题是

1
from my_module import MyClass

只导入MyClass,不导入整个模块。

如果要知道从中导入模块myClass的名称,可以使用:

1
print MyClass.__module__

如果要使用同一模块中的其他内容,可以使用:

1
2
my_module = __import__(MyClass.__module__)
print dir(my_module)

但仅仅写:

1
import my_module

谢谢Crash先生!以下是总结:

如果导入模块时使用:

1
from my_module import MyClass

不要直接使用模块的名称来调用它。相反,通过从该模块导入的类(使用类的module attr)访问它,例如:

1
2
print dir(MyClass.__module__)
print os.path.abspath( MyClass.__module__ )