我有一些处理参数的函数,如:
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
答案 0 :(得分:2)
您获得的错误消息意味着在a.modelerFunction(a)
中,您认为自己有一个功能,但事实并非如此。 a.modelerFunction
是用户定义的对象,而不是函数。如果您发布更多代码,我们可以找出原因。
答案 1 :(得分:2)
我不确定你为什么要做这个任务:
result = xsdPathsMap[xmlRootName]
a.modelerFunction = result # this is just kind of weird
将建模函数添加到a
类中,并将其称为方法:
a.createModel()
或者只是传递给建模函数:
result(a)
但是,这假设您从地图中检索的建模函数实际上是函数而不是类。
如果你想定义可调用的类当然没问题但你需要定义__call__
协议方法:
class MyModelingFunction(object):
...
def __call__(self, *args, **kwargs):
"""do something when I'm called"""