编程知识:卡片、牌组、继承及数据封装解析
1. 卡片比较
对于内置类型,有像 <
、 >
、 ==
等关系运算符来比较值,判断大小或相等关系。而对于用户自定义类型,可通过提供 __cmp__
方法来重写内置运算符的行为。
__cmp__
方法接收两个参数 self
和 other
,若第一个对象大则返回正数,第二个对象大则返回负数,相等则返回 0。
卡片的正确排序并不直观,比如梅花 3 和方块 2 哪个更好,需要决定牌面等级(rank)和花色(suit)哪个更重要。为简单起见,我们规定花色更重要,即黑桃大于红桃,红桃大于方块,方块大于梅花。
以下是 __cmp__
方法的实现:
# inside class Card:
def __cmp__(self, other):
# check the suits
if self.suit > other.suit: return 1
if self.suit < other.suit: return -1
# suits are the same... check ranks
if self.rank > other.rank: return 1
if self.ran