我在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问题,而不是一个开放式问题,但我无法确定解决方案。
答案 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)调用,然后调用你的其他函数。