【问题标题】:Python Namespaces and ModulesPython 命名空间和模块
【发布时间】:2014-01-26 23:05:30
【问题描述】:

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

import my_module

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

print(my_module) 

输出:来自“my_module.py”的模块“my_module”

dir(my_module)

输出:['MyClass', 'builtins', 'doc', 'file', 'name', 'package', 'math', 'os', 'sys']

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

print os.path.abspath( my_module.__file__  )

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

但如果不是 import '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

语法?

【问题讨论】:

  • 嗯?问题是什么?如果您只是导入 MyClass ...您只导入了该类...
  • 这对我有用。也许您根本不导入该模块,而是想打印它的详细信息。

标签: python module namespaces


【解决方案1】:

感谢崩溃先生! 总结如下:

如果模块是通过以下方式导入的:

from my_module import MyClass 

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

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

【讨论】:

    【解决方案2】:

    问题是

    from my_module import MyClass
    

    只导入 MyClass 而不是整个 Module。

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

    print MyClass.__module__
    

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

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

    但是写起来会容易得多:

    import my_module
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-15
      • 2016-05-21
      • 2019-01-08
      • 2011-01-22
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      相关资源
      最近更新 更多