2024-05-16 01:52:51 发布
网友
我有一个GAE应用程序的单元测试:
def test_getNeighborhoodKeys_twoCourses(self): cs1110, cs2110 = testutils.setUpSimpleCourses() foo = getFooResult() bar = getBarResult() self.assertEquals(foo, bar) # fails
这就是失败:
在我看来,考试应该通过。怎么了?在
看起来属于集合foo和bar的项是某种非常时髦的类型,它覆盖了__repr__否则,对于普通类型,会有引号来明确这些括号内到底是什么。因此,该类型还必须重写__eq__以确定相等条件(否则,默认情况下,两个实例只有在它们是相同的实例时才是相等的)。您也可以替代__cmp__,但这是一个非常古老且充满灰尘的方法,特别是像{}这样的比较在当今是非常受欢迎的!在
foo
bar
__repr__
__eq__
__cmp__
如果您确实重写了__eq__(或者__cmp__),那么一定要覆盖__hash__,因为比较相等的两个实例也有完全相同的散列值,这一点很重要,否则,将这些实例用作集的成员或字典中的键,会以非常难以预测的方式出现错误行为。在
__hash__
看起来属于集合}这样的比较在当今是非常受欢迎的!在
foo
和bar
的项是某种非常时髦的类型,它覆盖了__repr__
否则,对于普通类型,会有引号来明确这些括号内到底是什么。因此,该类型还必须重写__eq__
以确定相等条件(否则,默认情况下,两个实例只有在它们是相同的实例时才是相等的)。您也可以替代__cmp__
,但这是一个非常古老且充满灰尘的方法,特别是像{如果您确实重写了
__eq__
(或者__cmp__
),那么一定要覆盖__hash__
,因为比较相等的两个实例也有完全相同的散列值,这一点很重要,否则,将这些实例用作集的成员或字典中的键,会以非常难以预测的方式出现错误行为。在相关问题 更多 >
编程相关推荐