我正在尝试使用
type(,,)
函数动态构建模块。模块创建表示模板的类,我需要为每个
.tex
位于特定文件夹中的文件。例如,如果我有
a4-page-template.tex
文件,我需要创建一个名为
A4PageTemplate
.
我可以很容易地使用type语句创建类型;到目前为止,我所拥有的看起来是这样的;
#
# dynamictypes.py
#
import os, re
_requiredEnd = "-template.tex"
_packageDir = "C:\\Users\\...";
def _getClassName(name):
return re.sub("-(.)", lambda m: m.group(1).upper() , name) + "Template"
for file in os.listdir(_packageDir):
if file.lower().endswith(_requiredEnd):
_fileWithoutExt = file[:-len(_requiredEnd)]
_className = _getClassName(_fileWithoutExt)
_newClass = type(_className, (object,), dict(template=file))
print _newClass
注意倒数第二行创建类型,后面的print语句显示已经为每个模板创建了一个类型;
<class 'dynamictypes.PandocA4BookTemplate'>
<class 'dynamictypes.PandocBookTemplate'>
<class 'dynamictypes.PandocCompactTemplate'>
但是,当我使用这个模块时,我不能使用这个类型;如果我编写这个消费者脚本;
import dynamictypes
myTemplate = dynamictypes.PandocA4BookTemplate()
我得到这个错误;
Traceback (most recent call last):
File "C:\Users\steve.cooper\Desktop\driver.py", line 3, in <module>
myTemplate = dynamictypes.PandocA4BookTemplate()
AttributeError: 'module' object has no attribute 'PandocA4BookTemplate'
你能想出一种方法让我把我创建的类型添加到模块中,使它成为模块的一流部分吗?