2014-06-26 93 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