在python中,模块对象的info属性中包含了什么?

时间:2010-12-02 23:41:01

标签: python

我正在研究为程序创建一个插件结构,并使其即使核心库被视为插件。在我的研究中,我遇到了这个动态导入模块的代码。

def __initialize_def(self, module):
    """Attempt to load the definition"""

    # Import works the same for py files and package modules so strip!
    if module.endswith(".py"):
        name = module [:-3]
    else:
        name = module

    # Do the actual import
    __import__(name)
    definition = sys.modules[name]

    # Add the definition only if the class is available
    if hasattr(definition, definition.info["class"]):
        self.definitions[definition.info["name"]] = definition
        logging.info("Loaded %s" % name)

我试图理解这段代码的作用,并且我已经成功了。但是,我根本无法理解代码的后半部分,具体是这两行:

if hasattr(definition, definition.info["class"]):
    self.definitions[definition.info["name"]] = definition

我无法弄清楚definition.info["<key>"]指的是什么。

这个.info[]词典是什么?它包含什么?所有Python对象或仅模块对象是否通用?有什么用?

2 个答案:

答案 0 :(得分:2)

py> import sys,os
py> sys.modules["os"].info["class"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'info'

因此,此info属性必须特定于可用作此程序中的插件的模块。

答案 1 :(得分:0)

Python中的保留名称通常以两个下划线开头。您只是偶然发现了一些更大的代码库,这使得info模块范围值具有特殊含义。无论如何,我不认为它的作者为这些选择了一个特别好的名字; $ FRAMEWORK _MODULE_INFO会更明确。