我在某处看到了一些用于配置的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
答案 0 :(得分:2)
在该行上方的代码中:
Module = type(sys)
创建一个类型为module的变量。您可以打开解释器并键入以下代码:
import sys
Module = type(sys)
help(Module)
您将看到以下内容:
模块内置:
中的课程模块帮助类模块(对象) |模块(名称[,doc]) |
|创建一个模块对象。 |名称必须是字符串;可选的doc参数可以包含任何类型。 |
|这里定义的方法: |
|的 delattr 强>(...) | x。 delattr ('名称')< ==> del x.name |
|的的getAttribute 强>(...) | x。 getattribute ('名称')< ==> x.name |
|的初始化强>(...) | x。 init (...)初始化x;请参阅帮助(类型(x))以进行签名 |
|的再版强>(...) | x。 repr ()< ==>再版(x)的 ...
加载方法,你最困惑的基本上是,将文件添加到模块m然后编译这些模块中的代码。
通过使用此代码,我不知道您要尝试实现的是什么,但有更简单的方法来动态加载模块。例如: