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__ ) |