2014-06-26 29 views
0

也许是一个新手问题!返回控制台对象的属性


  • 我有2个班 - 卡和手
  • 卡与属性:西装,排名
  • 手是由卡追加空单创建。所以它的属性 是卡。

需要在控制台中写类似:

Ace D , Queen H 

我在谷歌,我需要认真纠正__str__(self)方法发现。 我不知道如何在方法__str__(self)写东西,我的输出将像我上面提到的。例如:

return self.hand 

执行以下操作:

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

我认为手对象是这样类型的列表:

[[卡1],[卡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") 

创建对象HAND

test_hand = Hand() 

添加卡片,随手

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

结果:

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

回答

1

在卡()类,你可以类似一个__str__()方法添加到

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

现在,当您打印卡比如,它会返回一个用户友好的字符串像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 
+0

谢谢!我还有一个问题。我不确定,如果我正在制定我的问题,请纠正我:这是唯一一种从Hand类中收集有关我的Class实例(对象c1,c2)的信息的方法吗?例如,如果我想在Hand类的方法中使用Card的变量。 – Ievgenii