在分配给OpenERP 7中的变量之前,从另一个函数中减去对一个函数的一次调用时输入错误

时间:2015-01-12 06:28:42

标签: python openerp

我在OpenERP 7中工作(托管在Windows 8 Server上)。我正在努力做出我认为是一个简单的改变,调整_product_qty_available变量,以便它调用_get_product_available_func方法两次,以便让我减少传出。我修改过的代码是:

def _get_product_available_func(states, what):
    def _product_available(self, cr, uid, ids, name, arg, context=None):
        return {}.fromkeys(ids, 0.0)
    return _product_available

_product_qty_available = _get_product_available_func(('done',), ('in', 'out')) - _get_product_available_func(('confirmed','waiting','assigned'), ('out',))
_product_virtual_available = _get_product_available_func(('confirmed','waiting','assigned','done'), ('in', 'out'))
_product_outgoing_qty = _get_product_available_func(('confirmed','waiting','assigned'), ('out',))
_product_incoming_qty = _get_product_available_func(('confirmed','waiting','assigned'), ('in',))
_product_real_qty = _get_product_available_func(('done',), ('in', 'out'))

当我使用以下错误进行此更改时,我的OpenERP服务器无法启动:

  

“TypeError:不支持的操作数类型 - :'function'和'function'

我确信这是一个python问题,而不是一个开放式问题,但我无法确定解决方案。

1 个答案:

答案 0 :(得分:0)

问题在于:

_get_product_available_func(('done',), ('in', 'out'))

显然返回一个功能。所以你需要调用来获得结果:

_get_product_available_func(('done',), ('in', 'out'))()

请注意最后的额外情况。如果您需要将参数传递给函数,请将它们放在那里(如果您需要参数但Python不会提供任何参数,则会引发异常)。

如果您需要返回一个功能:

_product_qty_available = lambda a1,a2:
    _get_product_available_func(('done',), ('in', 'out'))(a1,a2) -
    _get_product_available_func(('confirmed','waiting','assigned'), ('out',))(a1,a2)

如果每个函数都有两个参数,那只是一个例子。我们的想法是使用lambda创建一个匿名函数,它可以用两个参数(a1,a2)调用,然后调用你的其他函数。