回报类型不一致

时间:2014-08-23 05:06:13

标签: python

Human继承自Python内置的“dict”类。作为一个论点,它期望一本字典。 .getCars()方法返回存储在“car”或“cars”字典键中的值。对于键“car”,返回值是一个字符串。对于关键的“汽车”,值是一个字符串列表。因此.getCars()方法将返回两种类型的值:字符串或列表。 毋庸置疑,处理getCars()方法将变得非常乏味。我将不得不继续检查这次返回的内容:list或string ...这将导致后来的许多if / else语句。我的问题:在这样的情况下采取什么样的设计/方法?我是否应该强制执行相同类型的返回值(假设无论是否只有汽车或多个 - .getCars()总是返回一个列表)。虽然这种方法会导致一致的返回值类型,但它可能会在以后产生问题。由于将单个汽车打包到列表变量中,我必须执行if returned_list: real_return_value=returned_list[0]这也是多余的。

class Human(dict):
    def __init__(self, *args, **kwargs):
        super(Human, self).__init__(*args, **kwargs)
    def getCars(self):
        if 'cars' in self: return self.get('cars')
        elif 'car' in self: return self.get('car')

cars={'cars':['BMW','Porsche','Mercedes-Benz']}
car={'car':'Geo Metro'}

wealthy=Human(cars)
froogle=Human(car)

print wealthy.getCars()
print froogle.getCars()

1 个答案:

答案 0 :(得分:2)

除了规范化用于查找数据的密钥外,我还建议规范化返回类型。也就是说,即使在密钥"car"下只有一个,也总是返回一个汽车列表。我认为没有更优雅的解决方案:

def getCars(self):
    if "cars" in self:
        return self["cars"]
    elif "car" in self:
        return [self["car"]]  # build a list for the single car!
    else:
        return []  # return an empty list if neither key exists

如果一个人没有车,则返回空列表的替代方法可能是引发异常。