我有内容块“实例”的列表,在处理列表时,每个块的内容都是在内容类型类的实例中生成的(如果有意义的话)。
当我遍历列表时,我试图使用来自 extra_modules 的命名模块实例的输出来设置模块实例的属性。如果有更好的方法来写这个问题,请随时编辑。
以下只是我尝试使用 Python Bottle 框架运行的测试代码示例。在将内容生成代码实际放入 photoGallery 类之前,我正在尝试获取测试输出。
核心.py:
import extra_modules
module_blocks_in_db = [
# module-ID, module-sys-name, module-sys-desc, module-function, module-variables
[1, 'photo_gallery_main', 'A little intro gallery', 'photoGallery', '{"images": ["photo1.jpg", "photo2.jpg", "photo3.jpg"]}'],
]
class moduleBlocks:
def __init__(self, mbidb):
for i in mbidb:
setattr(self, i[1], getattr(extra_modules, i[3])(i[4]))
@route('/')
def home():
page_id = 1
modules = moduleBlocks(module_blocks_in_db)
return modules.photo_gallery_main
extra_modules.py:
class photoGallery:
def __init__(self, *args):
self.output = 'Output from photoGallery class instance'
return self.output
这是我从 Bottle 的开发服务器得到的错误:
File "core.py", line 46, in __init__
setattr(self, i[1], getattr(extra_modules, i[3])(i[4]))
TypeError: __init__() should return None
我真的不能很好地理解这个错误,而且我看代码的次数越多,我就越困惑自己。我现在尝试了几种不同的方法来从类实例中获取输出并将其分配为我的示例中的 moduleBlocks 类的属性。我哪里错了?
编辑:我现在已将我的 setattr 行更改为两个单独的行,并摆脱了 extra_modules photoGallery 类中的返回输出,现在一切正常,谢谢:
x = getattr(extra_modules, i[3])(i[4])
setattr(self, i[1], x.output)