collections.deque断言失败求助:为何断言不成立及正确写法?
问题原因
你触发断言错误的核心原因是:queue_challenge()返回的是你自定义的Queue类的实例,而不是deque对象。虽然print语句因为你实现了__str__方法,会输出和内部deque一样的字符串,但这只是显示层面的等价,实际对象类型完全不同——一个是Queue实例,一个是deque实例,用==比较时会直接返回False。
正确的断言写法
有两种常见的解决方式:
方式一:直接比较Queue实例的内部deque属性
既然你的Queue类把deque存在items属性里,直接断言这个属性等于目标deque即可:
assert queue_challenge().items == deque(['great', 'fun'])
方式二:给Queue类实现__eq__方法
如果你希望Queue实例能直接和deque(或者其他Queue实例)用==比较,可以在Queue类里添加__eq__方法,定义相等的规则:
class Queue: # 其他原有方法不变 def __eq__(self, other): # 可以处理和deque比较,也可以处理和其他Queue实例比较 if isinstance(other, deque): return self.items == other elif isinstance(other, Queue): return self.items == other.items return False
之后原来的断言就能正常工作了:
assert queue_challenge() == deque(['great', 'fun'])
内容的提问来源于stack exchange,提问作者Robin Andrews
相关产品推荐
相关产品推荐

