返回控制台对象属性

时间:2014-06-26 14:35:12

标签: python oop methods attributes self

  • 我有2个班 - 卡和手
  • 卡片属性:套装,等级
  • 通过用卡附加空列表来创建手。所以它的属性 是卡片。

需要在控制台中编写 ,例如:

Ace D , Queen H

我在Google中发现我需要仔细检查__str__(self)方法。 我不知道方法__str__(self)如何编写我的输出就像我上面提到的那样。例如:

return self.hand 

执行以下操作:

[<__main__.Card object>, <__main__.Card object>]

我认为Hand对象是这样的列表:

  

[[card 1],[card 2],..]

  

[[适合1,等级1],[..,..],..]

但我不知道如何从列表清单中获取该信息。 这样的写作没有帮助: 手[i] [0]为西装和手[i] [1]为第i张卡的等级 仍然没有得到。这是代码:

class Card:
    def __init__(self, suit, rank):
        if (suit in SUITS) and (rank in RANKS):
            self.suit = suit
            self.rank = rank
        else:
            print "Invalid card: ", suit, rank

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

class Hand:
    def __init__(self):
        self.hand = []
    def __str__(self):
        return str(self.hand)
    def add_card(self, card):
        self.hand.append(card)

创建对象卡

c1 = Card("S", "A")
c2 = Card("C", "2")

创建OBJECT HAND

test_hand = Hand()

添加卡牌

test_hand.add_card(c1)
test_hand.add_card(c2)
print test_hand

结果是:

[<__main__.Card object>, <__main__.Card object>]

1 个答案:

答案 0 :(得分:1)

在Card()类中,您可以添加类似于

__str__()方法
    def __str__(self):
        return "{} {}".format(self.rank, self.suit) # assuming Python2.7+

现在,当您打印一个Card实例时,它将返回一个用户友好的字符串,如Ace D

要为手部实例打印好的内容,可以使用.join()字符串方法和__str__()内的生成器。

def __str__(self):
    return ', '.join(str(c) for c in self.hand)

现在,当您打印手部实例时,它将提供用户友好的输出,如

Ace D , Queen H

了解有关__str__()__repr__()的更多信息的良好资源是this stackoverflow question

编辑:如果您将推荐的__str__()方法添加到更新的代码中,则输出就是您想要的:

A S, 2 C
相关问题