对象列表上的__str__方法

Fel*_*son 7 python

python的新手,尝试创建卡片组并希望为print(deck)=>实现一种打印方法,该方法给出了我的卡片的打印列表。

我的类PlayingCard具有str方法,该方法可以很好地打印单张纸牌。

但是,当我创建Deck.cards对象(这是PlayingCard对象的列表)时,似乎无法一次打印所有纸牌。

试着更换海峡再版。尝试返回str中的字符串列表

from enum import Enum

class Value(Enum):

    Two = 2
    Three = 3
    Four = 4
    Five = 5 
    Six = 6
    Seven = 7
    Eight = 8
    Nine = 9
    Ten = 10
    Jack = 11
    Queen = 12
    King = 13 
    Ace = 14

class Suit(Enum):

    Spades = 1
    Hearts = 2
    Clubs = 3
    Diamonds = 4


class PlayingCard():

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


    def __str__(self):
        return '{} of {}'.format(Value(self.value).name, Suit(self.suit).name)

class Deck():

    def __init__(self):
        self.cards=[PlayingCard(val,suit) for val in Value for suit in Suit]

    def __str__(self):
        return str(self.cards)
Run Code Online (Sandbox Code Playgroud)


deck = Deck()
print(deck)
Run Code Online (Sandbox Code Playgroud)

退货

[<__main__.PlayingCard object at 0x000001875FEC0080>,
<__main__.PlayingCard object at 0x000001875FE9EE48>,
....
....
]
Run Code Online (Sandbox Code Playgroud)

ruo*_*ola 5

您只需要将类__str__的方法替换PlayingCard__repr__方法即可:

class PlayingCard():

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

    def __repr__(self):
        return '{} of {}'.format(Value(self.value).name, Suit(self.suit).name)
Run Code Online (Sandbox Code Playgroud)

或者,您可以更改类__str__中的方法Deck来获取每张卡的字符串表示形式:

class Deck():

    def __init__(self):
        self.cards=[PlayingCard(val,suit) for val in Value for suit in Suit]

    def __str__(self):
        return str([str(card) for card in self.cards])
Run Code Online (Sandbox Code Playgroud)

然后你会得到正确的输出:

...

deck = Deck()
print(deck)
Run Code Online (Sandbox Code Playgroud)

输出:(
第二种方式将在每张打印的卡片周围添加引号)

[黑桃二、红心二、梅花二、方块二、黑桃三、红心三、梅花三、方块三、黑桃四、红心四、梅花四、方块四、五黑桃 5、梅花 5、方块 5、黑桃 6、红心 6、梅花 6、方块 6、黑桃 7、红心 7、梅花 7、方块 7、黑桃 8、红心八、梅花八、方块八、黑桃九、红心九、梅花九、方块九、黑桃十、红心十、梅花十、方块十、黑桃杰克、杰克红心、梅花 J、方块 J、黑桃 Q、红心 Q、梅花 Q、方块 Q、黑桃 K、红心 K、梅花 K、方块 K、黑桃 A、红心 A、梅花 A、方块 A]

当您调用__str__一个list对象时,它将遍历列表中的每个元素并调用__repr__该对象以获取其表示形式。

因此,当您致电 时print(deck),您会得到:

--> deck.__str__()
--> str(self.cards)
--> [card.__repr__() for card in self.cards]
Run Code Online (Sandbox Code Playgroud)