Python 如何正确实施/过载“__报告;?

Python 如何正确实施/过载“__报告;?,python,overloading,Python,Overloading,python新手,这可能是一个愚蠢的问题,但是如何正确实现repr方法呢 我编写了一个快速的小程序来模拟纸牌游戏,但我不知道该为repr方法编写什么。卡片类的repr方法非常简单,但我不知道如何处理DeckOfCards类以下是我的代码: import random class Card: '''Create a single card, by id number''' # Class variables, created once for the class suits = [ '\

python新手,这可能是一个愚蠢的问题,但是如何正确实现repr方法呢

我编写了一个快速的小程序来模拟纸牌游戏,但我不知道该为repr方法编写什么。卡片类的repr方法非常简单,但我不知道如何处理DeckOfCards类以下是我的代码:

import random
class Card:
'''Create a single card, by id number'''

# Class variables, created once for the class
    suits = [ '\u2660', '\u2661', '\u2662', '\u2663' ]
    ranks = [ 'A','2','3','4','5','6','7','8','9','10','J','Q','K' ]

    def __init__(self, n=0):
    # instance variables for _num, _rank, _suit, _value
    if 0 <= n < 52:
        self._num = n
        self._rank = Card.ranks[n%13]       # note referencing class vars
        self._suit = Card.suits[n//13]
        self._value = n%13 + 1
        if self._rank == 'A':
            self._value = 14
    else: # invalid card indicators
        self._rank = 'x'
        self._suit = 'x'
        self._value = -1

    def __repr__(self):
        return  self._rank + self._suit

    def __lt__(self,other):
        return self._value < other._value

    def __le__(self,other):
        return self._value <= other._value

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

class DeckOfCards:
'''A Deck is a collection of cards'''

    def __init__(self):
        self._deck = [ Card(i) for i in range(52) ]

    def __repr__(self):
        return 'Deck : ', self._deck

    def shuffle(self):
        return random.shuffle(self._deck)

    def deal_a_card(self, i=-1):
    #that way player can choose where to draw from 
        return self._deck.pop(i)

    def cards_left(self,count):
        return len(self._deck)

new_deck = DeckOfCards()
随机导入
班级卡:
''根据id号创建一张卡''
#类变量,为类创建一次
西服=['\u2660'、'\u2661'、'\u2662'、'\u2663']
排名=[‘A’、‘2’、‘3’、‘4’、‘5’、‘6’、‘7’、‘8’、‘9’、‘10’、‘J’、‘Q’、‘K’]
定义初始化(自,n=0):
#_num、_rank、_suit、_value的实例变量

如果0
\uuuu repr\uuuu
理想情况下可以返回用于创建此实例的对象的表示形式

发件人:

对于许多类型,此函数尝试返回一个字符串,该字符串在传递给eval()时将生成具有相同值的对象,否则表示形式是一个尖括号中的字符串,其中包含对象类型的名称以及通常包括对象名称和地址的附加信息


您应该返回字符串类型,例如在Deck中:

def __repr__(self):
    ...
    return 'Deck : '+str(self._deck)

首先,需要注意的是,您不必实现
\uuuu repr\uuu
方法。Python提供了一个合理的默认值(它至少会告诉您类型)

如果您想实现
\uuuu repr\uuuu
,“经验法则”是,在有意义的地方,您应该提供有关对象的足够信息,以便用户可以重建它。在你的例子中,从一副牌到另一副牌似乎没有任何真正的区别,所以

def __repr__(self):
    return 'Deck()'
可能是一个合理的返回值。这并不能正确地获得状态(洗牌后),但您没有提供用于在特定状态下构造组的接口。如果您这样做了,它可能看起来像:

def __repr__(self):
    return 'Deck(%s)' % self._deck

我以前就是这样得到它的,但每次把它转换成字符串似乎都是浪费。但是,是的,那就可以了。标记回答的问题,这样人们就不会继续发布答案了。:)由于时间限制,回答得太快了。但我会的,谢谢!我知道默认方法,但我需要以特定的方式格式化它。