我有一个方法可以从其中一个对象返回参考值。在调用方法之前,我不知道将返回哪个类对象。不同的类引用属性不同,但它用于相同的目的。
看起来像这样:
def _get_ref_object(self):
""""Return reference object: invoice or expense"""
self.line_ids.ensure_one()
line = self.line_ids[0]
invoice = line.move_line_id.invoice
if invoice:
return invoice
else: # If there is no invoice, it means it is expense
return line.expense_id
现在,当我有确切的对象时,我可以从各种属性返回各种参考值。
例如,如果我需要参考发票或费用编号,对于发票,我需要返回number
属性的值和费用,name
属性的值。
但为了实现这一点,我需要再次调用if / else来知道返回了哪个对象,例如:
def get_reference(self, ref):
obj = self._get_ref_object()
if ref == 'number':
if obj._name = 'account.invoice':
return obj.number
else:
return obj.name
现在,如果我想获得另一个属性的引用,我需要做同样的if / else检查。但我开始思考,也许使用字典映射所有这些,然后只使用ref
作为键访问属性?从性能的角度来看,只是访问字典的值而不是if / else更快吗?如果在这种情况下这是一个很好的做法?
更新使用dict映射实现:
_ref_map = {
'account.invoice': {'ref': 'number'},
'hr.expense.expense': {'ref': 'name'}
}
def get_reference(self, ref):
obj = self._get_ref_object()
attr = _ref_map[obj._name][ref]
return getattr(obj, attr)