我有一些处理参数的函数,比如:
def createDataModel(objectModel):
......
def createLayoutModel(objectModel):
......
def createWidgetModel(objectModel):
......
我有一些xml作为输入文件,有一个特定的根标记名,比如(dataModel,layout,page),然后我将它们转换为一个对象模型。我有一个映射,它确定哪个函数应该处理对象模型
xsdPathsMap = {
"dataModel": createDataModelFromXml,
"layout": createLayoutModel,
"page": createWidgetModelFromXml
}
然后我从xml创建对象模型,并为它们分配处理它们的函数
result = xsdPathsMap[xmlRootName]
# a is objectified xml
a.modelerFunction = result
当我想将对象传递给它的闭包方法时,出现了以下异常:
a.modelerFunction(a)
TypeError: object is not callable
怎么了?
这是我的回溯:
Traceback (most recent call last):
File "model/xmlTranporter.py", line 204, in <module>
a = main("main/schema")
File "model/xmlTranporter.py", line 200, in main
a(obj)
TypeError: 'lxml.objectify.StringElement' object is not callable
我不知道你为什么要做这个作业:
将modeler函数添加到
a
类中,然后将其作为方法调用:或者只将a传递给建模函数:
但是,这假设您从映射中检索的建模函数实际上是函数,而不是类。
如果要定义可调用的类,当然可以,但需要定义
__call__
协议方法:您得到的错误消息意味着在
a.modelerFunction(a)
中,您认为您有一个函数,但您没有。a.modelerFunction
是用户定义的对象,而不是函数。如果你发布更多的代码,我们可以找出原因。相关问题 更多 >
编程相关推荐