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
最後から2番目の行がタイプを作成し、それに続く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'
作成したタイプをモジュールに追加して、モジュールのファーストクラスの部分にする方法を考えてみてください。