返回类型不一致

0 投票
1 回答
1438 浏览
提问于 2025-04-18 18:15

Human 是从 Python 内置的 'dict' 类继承而来的。它需要一个字典作为参数。.getCars() 方法会返回存储在 "car" 或 "cars" 这个字典键里的值。对于 "car" 这个键,返回的值是一个字符串;而对于 "cars" 这个键,返回的值是一个字符串列表。所以,.getCars() 方法会返回两种类型的值:字符串或列表。

不用说,处理 getCars() 方法会变得非常麻烦。我得不停地检查这次它返回的是列表还是字符串……这就会导致后面需要写很多的 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 个回答

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

如果一个人没有车,除了返回一个空列表,另一种选择是抛出一个异常。

撰写回答