我試圖使用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'
您能否想出一種方法讓我將創建的類型添加到模塊中,以便它是模塊的頭等部分?
順便說一句,你的代碼 - 使用pandoc和乳膠 - 看起來很有趣。如果它是公開的,你在建造什麼? – loevborg 2010-08-11 14:54:37
好吧,目前它不公開,但它可能是 - 如果我確實公開,我會在這裏發佈。它是一個用於windows的崇高文本文本編輯器的插件 - http://www.sublimetext.com - 可以用python編寫腳本。該插件允許您使用許多不同的LaTeX模板將降價文件轉換爲PDF。它依賴於pandoc和MikTeX。 – 2010-08-11 16:38:07