【问题标题】:__str__() help python 3__str__() 帮助 python 3
【发布时间】:2020-03-26 18:29:50
【问题描述】:

我在self.deck 列表中附加了所有可能的卡片,但是当我尝试使用字符串表示方法打印出列表时,它给了我<__main__.Deck object at 0x00238148> 我不知道为什么!我的代码在下面,如果有人可以查看它并告诉我如何在Deck 类中获取所有card,我将不胜感激?

suits = ('Hearts', 'Diamonds', 'Spades', 'Clubs')
ranks = ('Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King', 'Ace')

class Card():

    def __init__(self, suit, rank):
        self.suit = suit
        self.rank = rank

    def __str__(self):
        return self.rank + " of " + self.suit


class Deck():

    def __init__(self):
        self.deck = []
        for suit in suits:
            for rank in ranks:
                self.deck.append(Card(suit, rank))

    def __str__(self):
        for card in self.deck:
            return card

deck = Deck()
print(deck)

【问题讨论】:

    标签: python-3.x loops oop blackjack


    【解决方案1】:

    return 从函数返回它后面的值,结束函数。你只从一个函数返回一次。你的__str__ 函数应该返回一个字符串,它应该包含你想要的字符串中的所有内容。你可以遍历你的牌组并添加到一个字符串中:

    s = ''
    for card in self.deck:
        s += str(card) + ', '
    

    但是你必须处理最后的额外逗号。但是没有必要重新发明轮子。 Python中的列表可以用str()转成字符串,所以

    str(self.deck)
    

    会是这样的

    '[Two of Hearts, Three of Hearts, ... ]'
    

    如果想要更灵活,可以使用字符串的join方法,可以取一个列表:

    '; '.join(self.deck)
    

    应该是这样的

    'Two of Hearts; Three of Hearts; ...'
    

    【讨论】:

    • 我有一个问题。 “str(card)”和“card.__str__()”是相同的东西还是不同的东西?
    • @RahulTirkey 基本相同。 str(x) 如果已定义则返回 x.__str__(),如果未定义,则返回 repr(x),即返回 x.__repr__()
    【解决方案2】:

    __str__ 方法应始终返回字符串。在您的卡片类中,__str__ 的返回类型是正确的,但在 Deck 类中您返回的是卡片对象,而不是您应该在 __str__ 方法中调用卡片对象的字符串表示形式。

       class Deck():
    
        def __init__(self):
            self.deck = []
            for suit in suits:
                for rank in ranks:
                    self.deck.append(Card(suit, rank))
    
        def __str__(self):
            for card in self.deck:
                return str(card)
    

    【讨论】:

      猜你喜欢
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      相关资源
      最近更新 更多