python - 通过属性检查类的重复实例
问题描述
我正在编写一个创建扑克手的引擎,即使我从多个套牌中抽牌,我也希望每手只包含独特的牌
我的问题是,这段代码
for z in range(dr):
if self.cards[-1] not in drawcards:
drawcards[z] = self.cards.pop()
不将花色 x 和值 y 的牌注册为与另一张花色 x 和值 y 的牌相等
这是我的卡类:
class Card:
"""A class containing the value and suit for each card"""
def __init__ (self, value, suit):
self.value = value
self.suit = suit
self.vname = value_names[value]
self.sname = suit_names[suit]
def __str__(self):
#Irrelevant
def __repr__(self):
#Irrelevant
如何使我的程序注册卡 a 与花色 x 和价值 y 等于卡 b 与花色 x 和价值 y?
编辑:对于将来查看这个问题的人来说,除了__eq__
,
def __hash__(self):
return hash((self.value, self.suit))
对于 for 循环中指定的相等性是必需的
解决方案
你需要__eq__
在你的类上定义来处理比较。这是文档。您可能还想实施__hash__
。文档对此进行了更多讨论。
def __eq__(self, other):
# Protect against comparisons of other classes.
if not isinstance(other, __class__):
return NotImplemented
return self.value == other.value and self.suit == other.suit
推荐阅读
- c++ - Resolving competing include directories in CMake
- javascript - mongoose 从多个对象中提取嵌套数组到一个数组中
- gradle - gradle - 使用dependsOn完成任务后的清理
- python - 每日提及一个词
- pytorch - vgg概率加起来不等于1,pytorch
- javascript - 带有从 sql 和 php 链接的数据的 javascript 日期格式
- php - 不可能在变量中返回一个简单的函数
- angular - 从 ionic 2 中的子组件调用方法
- r - 每个价值每年的百分比
- android - 如何在 kotlin android 中正确声明应用程序类