当试图用py.tes公司

2024-05-16 03:53:36 发布

您现在位置:Python中文网/ 问答频道 /正文

为了学习Python,我正在测试一个基于文本的游戏。最近几天,我一直在忙着寻找解决我不断遇到的问题的方法。我试过多种测试方法,但结果都是一样的。在

问题是以下断言错误(使用py.test):

 E       AssertionError: assert <Textgame.Waffle.WineFields object at 0x03BDECD0> == 
 <Textgame.Waffle.WineFields object at 0x03BD00D0>

显然,对象(Textgame.Waffle.WineFields)是正确的,但是位置不同。我不在乎地点。我想这是因为我使用的是两个内容相同的独立词典。不过,如果可能的话,我宁愿继续使用这本词典。在

测试的最小工作示例如下:

^{pr2}$

在短信游戏。华夫饼我想说的游戏是这样的:

class WineFields(object):
    pass

class Map(object):

    roomnames = {
        'the wine fields': WineFields(),
    }

    def __init__(self, next_one):
        self.next_one = next_one

    def change(self, next_one):
        return Map.roomnames[next_one]

我尝试了一些方法来解决这个问题,例如使用

def __eq__(self, other):
    return self.next_one == other.next

在Map类中,但要么我放错了它,要么根本就不应该用它来解决这个问题。我是从另一个StackOverflow页面上得到这个想法的,这个页面的问题大致相同:

Learn Python the Hard Way, Ex 49 : Comparing objects using assert_equal

有人能给我解释一下,我怎样才能断言我得到的输出是我期望的,而不必担心位置是否相同?在


Tags: 方法self游戏mapobjectdefassert断言
1条回答
网友
1楼 · 发布于 2024-05-16 03:53:36

您需要能够识别每个实例:

class X:

    def __init__(self, x):
        self.x = x

    def __eq__(self, other):
        return self.x == other.x 

这意味着构造它们需要一个参数:

^{pr2}$

由于成员x相等,这两个不同的实例将彼此相等。在

事实上,我已经复制了你reference问题中的公认答案

相关问题 更多 >