Python命名空间和模块

时间:2014-01-08 17:32:41

标签: python module namespaces

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

import my_module

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

print(my_module) 

输出:'my_module.py'中的模块'my_module'

dir(my_module)

输出:['MyClass','内置','文档','文件','名称','','数学','os','sys']

我甚至可以通过使用:

找出模块的绝对路径
print os.path.abspath( my_module.__file__  )

输出:/Users/julia/Documents/classes/my_module.py

但如果不是导入'my_module',我会使用:

from my_module import MyClass

我所能做的就是:

print MyClass

输出:my_module.MyClass

我确实看到MyClass来自my_module文件。但不幸的是,这是我能得到的全部,因为我以前用来获取模块信息的命令都不起作用。这是使用和他们的输出:

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

在跟踪

带来的导入模块时,我应该使用什么命令(-s)
from my_module import MyClass

语法?

2 个答案:

答案 0 :(得分:1)

问题在于

from my_module import MyClass

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

如果您想知道从中导入模块MyClass的名称,您可以使用:

print MyClass.__module__

如果您想使用同一模块中的其他Stuff,您可以使用:

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

但是写起来会容易得多:

import my_module

答案 1 :(得分:0)

谢谢Mr.Crash! 以下是摘要:

如果模块导入时使用:

from my_module import MyClass 

不要直接使用其名称来调用模块。 而是通过从该模块导入的类(使用类的模块 attr)来实现它,例如:

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