【问题标题】:How to print a list from a class如何从班级打印列表
【发布时间】:2021-09-01 02:16:58
【问题描述】:

我尝试了不同的方法,通过循环或将其更改为字符串来打印类中的列表。当我在一个类中为一个字符串更改它时,我得到多个"<__main__.Card object at 0x00000262D8279820>",当我在一个类中循环它时,我得到 Traceback "TypeError: __str__ returned non-string (type Card)"。我怎样才能简单地显示一个类的列表?


class Card:
    def __init__(self, suit, rank):
        self.suit = suit
        self.rank = rank
        self.value = values[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

【问题讨论】:

  • 卡呢?是否定义了__str__

标签: python list class methods printing


【解决方案1】:

我不知道Card是什么,但是你可以直接返回deck的字符串:

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

    def __str__(self):
        return str(self.deck)

您可能还需要实现 __repr__() 以获取列表以呈现您的卡片:

class Card:
    def __init__(self, suit, rank):
        self.suit = suit
        self.rank = rank
        self.value = values[rank]

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

【讨论】:

  • 我试过了,但它只会显示 "<__main__.card object at... card>
【解决方案2】:

在给定的示例中,您实际上从未将卡片转换为字符串。这是一种方法。

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

    def __str__(self):
        return ', '.join(map(str, self.deck))
  • map(str, self.deck) 将使用 __str__ 方法将 self.deck 的每个元素转换为字符串。
  • ', '.join(...) 将连接列表中的每个元素,并用', ' 分隔它们。

假设您的 Card 类定义了 __str__ 方法,这将起作用,例如:

class Card:

   [...]

    def __str__(self):
        return f"{self.suite}: {self.rank}"

【讨论】:

    【解决方案3】:

    据我所知,您正在尝试打印列表的内容。但看起来该列表包含Card 类的卡片。它也是一个对象,将返回类似于“”的内容。看来Card 类也需要__str__

    同样使用return 只会返回第一个元素,因为它将退出块。

    【讨论】:

      猜你喜欢
      • 2017-09-17
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      相关资源
      最近更新 更多