使用内置类型(,,)函数创建动态modu

2024-09-27 00:17:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用^{}函数动态构建一个模块。该模块创建表示模板的类,我需要为位于特定文件夹中的每个.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语句表明已经为每个模板创建了一个类型

^{pr2}$

但是,当我使用模块时,我不能使用类型;如果我编写这个消费者脚本

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'

您能想出一种方法来将我创建的类型添加到模块中,使其成为模块的一级部分吗?在


Tags: 模块pyimportre模板类型ostype
1条回答
网友
1楼 · 发布于 2024-09-27 00:17:11

您已经创建了新类并将其分配给全局变量_newClass,但是您没有存储这个变量!请注意,如果您这样做dynamictypes._newClass,您将得到最终类型的创建。在

创建新类时,需要创建一个变量来保存每个新类:

globals()[ _className ] = _newClass

这会在模块中将_className注册为全局变量,以便您可以从外部访问它。在

顺便说一下,您的regex在a4-page-template.tex上失败,您得到的是a4PageTemplate,而不是{}。在

相关问题 更多 >

    热门问题