返回类型不一致
类 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
如果一个人没有车,除了返回一个空列表,另一种选择是抛出一个异常。