使用temp变量存储super返回值时出现奇怪的super()返回行为

2024-07-05 09:04:54 发布

您现在位置:Python中文网/ 问答频道 /正文

硫多糖

为什么这两个函数在使用temp返回结果时会返回不同的值?你知道吗

我以前从未见过这种行为,我需要了解原因。 有什么线索或想法吗?你知道吗

def _store_get_values(self, cr, uid, ids, fields, context=None):
    return super(pai, self)._store_get_values(cr, uid,  ids, fields, context)

退货

[(10, 'pai', [13484L], ['line_next_approver_id', 'next_approver_id', 'line_id', 'partner_id'])]

以及

def _store_get_values(self, cr, uid, ids, fields, context=None):
    result = super(pai, self)._store_get_values(cr, uid, ids, fields, context)
    return result

退货

[(10, 'pai', [13485L], ['line_id', 'next_approver_id', 'partner_id', 'line_next_approver_id'])]

我在openerp/odoo框架中有这个。但我相信这与框架逻辑无关,而是与Python方法有关


Tags: storeselfididsfieldsuidgetdef
1条回答
网友
1楼 · 发布于 2024-07-05 09:04:54

sourcecodebrowser.com

02486     def _store_get_values(self, cr, uid, ids, fields, context):
02487         result = {}
02488         fncts = self.pool._store_function.get(self._name, [])
02489         for fnct in range(len(fncts)):
02490             result.setdefault(fncts[fnct][0], {})
02491             ids2 = fncts[fnct][2](self,cr, uid, ids, context)
02492             for id in filter(None, ids2):
02493                 result[fncts[fnct][0]].setdefault(id, [])
02494                 result[fncts[fnct][0]][id].append(fnct)
02495         result2 = []
02496         for object in result:
02497             k2 = {}
02498             for id,fnct in result[object].items():
02499                 k2.setdefault(tuple(fnct), [])
02500                 k2[tuple(fnct)].append(id)
02501             for fnct,id in k2.items():
02502                 result2.append((fncts[fnct[0]][4],object,id,map(lambda x: fncts[x][1], fnct)))
02503         result2.sort()
02504         return result2

此代码似乎是code golf challenge的结果,但是。。。result2.append(...)是生成结果的行。让我们仔细看看:

result2.append((
    fncts[fnct[0]][4],
    object,
    id,
    map(lambda x: fncts[x][1], fnct)
))

map()的结果是给出问题的列表。map()返回的项的顺序取决于fnct中项的顺序。你知道吗

什么是fnct?它来自k2k2result[object]生成。result是从ids2生成的。ids2是调用fncts[fnct][2]的结果。fncts取自self.pool._store_function。你知道吗

所以,看看你的_store_function的来源,你就会找到答案。你知道吗

相关问题 更多 >