python类attributerr但方法已定义

2024-04-29 04:12:26 发布

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

class Card(object):
    suitList = ("Clubs", "Diamonds", "Hearts", "Spades")
    rankList = ("narf", "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King")

    def __init__(self, suit = 0, rank = 2):
        self.suit = suit
        self.rank = rank
    def __str__ (self):
        return "%s of %s" % (self.rankList[self.rank], self.suitList[self.suit])
    # override built-in compare function:
    def __cmp__(self, other):
        # use if instead of if...elif..else
        if self.suit > other.suit: return 1
        if self.suit < other.suit: return -1

        if self.rank == 1 and other.rank != 1: return 1
        if self.rank != 1 and other.rank == 1: return -1
        if self.rank > other.rank: return 1
        if self.rank < otehr.rank: return -1

        return 0

# test code
card1 = Card(0, 12)
card2 = Card(1, 2)
print card1.cmp(card2)

下面是错误消息: 回溯(最近一次呼叫): 文件“C:\Python27\OOP_卡片类.py,第29行,在 打印卡1.cmp(卡2) AttributeError:“Card”对象没有属性“cmp”

为什么?你知道吗


Tags: andofselfreturnifdefcardother
2条回答

__cmp__!=cmp。尝试使用==!=,因为实现__cmp__的原因是为了这些运算符。不是直接使用__cmp__,而是使用它来“重载”操作符。见:http://en.wikipedia.org/wiki/Ad-hoc_polymorphism

必须是__cmp__,而不是cmp

print card1.__cmp__(card2)

相关问题 更多 >