Python - if / else vs dict mapping?

时间:2015-11-11 14:47:48

标签: python if-statement dictionary

我有一个方法可以从其中一个对象返回参考值。在调用方法之前,我不知道将返回哪个类对象。不同的类引用属性不同,但它用于相同的目的。

看起来像这样:

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)

0 个答案:

没有答案