2

我在某处看到了一些用于配置的 python 代码,但我无法理解。

这是代码:

import sys, os.path

Module = type(sys) # What does this line for? 

modules = {}

print dir(Module)

def load(fullpath, env={}, module=Module):
    try:
        code = open(fullpath).read()
    except IOError:
        raise ImportError, 'No module named %s' % fullpath

    filename = os.path.basename(fullpath)

    try:
        return modules[filename]
    except KeyError:
        pass

    #################################### 
    #### Most confused 

    m = module(filename) 
    m.__module_class__ = module
    m.__file__ = fullpath

    m.__dict__.update(env)

    exec compile(code, filename, 'exec') in m.__dict__
    ####################################

    modules[filename] = m

    return m


def unload(m):

    filename = os.path.basename(m.__file__)
    del modules[filename]

    return None


def reload(m):
    fullpath = m.__file__

    try:
        code = open(fullpath).read()
    except IOError:
        raise ImportError, 'No module named %s' % fullpath

    env = m.__dict__
    module_class = m.__module_class__

    filename = os.path.basename(fullpath)
    m = module_class(filename)

    m.__file__ = fullpath
    m.__dict__.update(env)
    m.__module_class__ = module_class

    exec compile(code, filename, 'exec') in m.__dict__
    modules[filename] = m

    return m
  1. 我不明白为什么要使 Module = type(sys)
  2. var m 及其内置方法有什么作用,我在哪里可以找到文档?
  3. 为什么只定义一个dict var?
4

1 回答 1

2

在该行上方的代码中:

Module = type(sys)

创建一个模块类型的变量。您可以打开解释器并键入以下代码:

import sys
Module = type(sys)
help(Module)

您将看到以下内容:

关于内置模块中的类模块的帮助:

类模块(对象) | 模块(名称[,文档])|
| 创建一个模块对象。| 名称必须是字符串;可选的 doc 参数可以是任何类型。|
| 此处定义的方法:|
| delattr (...) | X。delattr ('name') <==> del x.name |
| 获取属性(...) | X。getattribute ('name') <==> x.name |
| 初始化(...) | X。init (...) 初始化 x;签名见 help(type(x)) |
| 代表(...) | X。代表() <==> 代表 (x) ...

加载方法,你最困惑的地方基本上是在模块 m 中添加文件,然后编译这些模块中的代码。

我不知道您要通过使用此代码来实现什么,但是有更简单的方法可以动态加载模块。例如:

python模块的动态加载

于 2013-04-03T13:40:45.897 回答