使用__str__打印对象的数组元素

1 投票
3 回答
2284 浏览
提问于 2025-04-30 11:09

我正在Coursera上做一个小项目。(Card是一个在其他地方定义的类。)

class Deck:    
    def __init__(self):
        self.deck = []
        for i in SUITS:
            for j in RANKS:
                self.deck.append(Card(str(i), str(j)))
    def deal_card(self):
        self.temp = random.randrange(0,52)        
        return(self.deck[self.temp])

    def __str__(self):
        #TODO

main()
test_deck = Deck()
c1 = test_deck.deal_card()
print test_deck

我知道列表self.deck里包含了一些Card对象。有没有人能告诉我,怎么在我的__str__方法里打印出self.deck的值(也就是这个对象所指向的内容)?

暂无标签

3 个回答

0

Python的文档里有关于如何使用__str__的方法。

简单来说,当你执行:

print something

Python会调用something__str__方法,然后把结果输出。

根据我的猜测,你可能想要打印出这个对象是一个牌组的事实。所以你可能想要这样的代码:

class Deck:
    # ...
    def __str__(self):
        return "Deck()"

既然你在学习Python,我有一些建议:

  1. 正如@abarnert所说,当你在Python 2中写class ABC:时,它是一个旧式类。(更多信息可以在这里找到)
  2. 虽然不是必须的,但在每个函数前面加个空行是个好习惯。
  3. 尽量避免使用单个字符的变量名。(比如ij

所以,你的代码(应该)看起来像这样:

class Deck(object):

    def __init__(self):  # Blank line above...
        self.deck = []
        # Change variable names...
        for suit in SUITS:
            for rank in RANKS:
                self.deck.append(Card(str(suit), str(rank)))

    def deal_card(self):  # Blank line above...
        self.temp = random.randrange(0,52)
        return(self.deck[self.temp])

    def __str__(self):
        return "Deck()"

最后,你可能还想看看这个,其实就是我之前提到的同一页面,重复了一次。

0

你也可以这样做:

def __str__(self):
  return ','.join(str(x) for x in self.deck)

之后,牌组中的每一张卡片实例都需要重新定义它们自己的字符串表示方法,这样才能正确格式化显示。

3

只需要把它转换成一个字符串就可以了。

return str(self.deck)

撰写回答