Я пытаюсь использовать функцию type(,,)
для динамического построения модуля. Модуль создает классы, представляющие шаблоны, и мне нужен новый класс для каждого файла .tex
, который находится в определенной папке. Например, если у меня есть файл a4-page-template.tex
, мне нужно создать класс с именем A4PageTemplate
.
Я могу достаточно легко создать тип, используя оператор типа; что у меня до сих пор выглядит так;
#
# 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'
Можете ли вы придумать, как мне добавить созданный мной тип в модуль, чтобы он был первоклассной частью модуля?