有人可以告诉我如何使用OOP打印出卡片组中的卡片列表吗?我目前正在上课,并试图学习Python 2。
我尝试分配d = Deck()然后打印d.cards但它只返回列表中所有52张卡的内存位置。
我错过了什么?
import random
rank = [2,3,4,5,6,7,8,9,10,'Jack','Queen','King','Ace']
suit = ['Diamonds','Clubs','Hearts','Spade']
class Card(object):
def __init__(self,rank,suit):
self.rank = rank
self.suit = suit
def __str__(self):
return str(self.rank) + ' of ' + str(self.suit)
def grab_suit(self):
return self.suit
def grab_rank(self):
return self.rank
def draw(self):
print (self.suit + self.rank)
class Deck(object):
def __init__(self):
self.cards = []
for i in rank:
for j in suit:
self.cards.append(Card(i,j))
def __str__(self):
return self.cards()
答案 0 :(得分:2)
在Deck.__str__
中,您希望获得Card
s的字符串表示列表:
def __str__(self):
return str([str(card) for card in self.cards])
您需要执行此操作的原因是,当Python打印列表时,它会根据__repr__
格式化内容,而不是__str__
。我们需要字符串表示,因此我们通过显式调用str
来生成字符串列表,这将最终调用Card.__str__()
。
另外需要注意的一点是:当你没有执行其他代码时,为属性编写getter是没有意义的。我建议删除Card.grab_suit()
和Card.grab_rank()
。只需card.suit
和card.rank
。
答案 1 :(得分:0)
什么时候:
print(d.cards)
print
函数仅调用列表对象的__str__
方法。如果您希望调用每个元素__str__
方法,则必须明确地执行此操作:
print([str(card) for card in d.cards])