Python中的类目标平等

时间:2016-01-21 21:56:32

标签: python-3.x

我创建了一个下面列出的类

class Card:
    suitList = ["Clubs", "Diamonds", "Hearts", "Spades"]
    rankList = ["1", "2", "3", "4"]
    def __init__(self, suit=0, rank=0):
        self.suit = suit
        self.rank = rank
        self.cards = []

然后我在卡片列表中添加了几个项目。

card1 = Card(1, 1)
card2 = Card(2, 2)
card3 = Card(3, 1)
cards.append(card1)
cards.append(card2)
cards.append(card3)

接下来,我测试card1是否在卡片列表中。

card1 in cards
Out[451]: True

这似乎很好。但是,

card = Card(1,1)
card in cards
Out[453]: False

“card”看起来与card1相同。

我的问题是:为什么“卡”不在列表卡中?

1 个答案:

答案 0 :(得分:1)

尝试查看card == card1的输出。他们不一样,即使你认为他们一定是这样。

这是因为在Python中,相等的默认检查是通过对象标识。 card是与card1不同(但相似)的对象。

为了让Python知道如何比较Card个对象的相等性,你必须在类上定义一个__eq__方法。

class Card(object):
    ...
    def __eq__(self, other):
        return self.suit == other.suit and self.rank == other.rank