0

我有一些处理参数的函数,例如:

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
4

2 回答 2

2

我不确定你为什么要做这个任务:

result = xsdPathsMap[xmlRootName]
a.modelerFunction = result # this is just kind of weird

要么将建模器函数添加到类中,a然后将其作为方法调用:

a.createModel()

或者只是将 a 传递给建模函数:

result(a)

但是,这假设您从地图中检索的建模函数实际上是函数而不是类。

如果你想定义可调用的类当然没问题,但你需要定义 __call__协议方法:

class MyModelingFunction(object):
    ...

    def __call__(self, *args, **kwargs):
        """do something when I'm called"""
于 2012-07-21T12:01:13.147 回答
2

您收到的错误消息意味着在 中a.modelerFunction(a),您认为您有一个功能,但您没有。 a.modelerFunction是用户定义的对象,而不是函数。如果您发布更多代码,我们可以找出原因。

于 2012-07-21T11:45:22.183 回答