使用__str__打印对象的数组元素
我正在Coursera上做一个小项目。(Card
是一个在其他地方定义的类。)
class Deck:
def __init__(self):
self.deck = []
for i in SUITS:
for j in RANKS:
self.deck.append(Card(str(i), str(j)))
def deal_card(self):
self.temp = random.randrange(0,52)
return(self.deck[self.temp])
def __str__(self):
#TODO
main()
test_deck = Deck()
c1 = test_deck.deal_card()
print test_deck
我知道列表self.deck
里包含了一些Card对象。有没有人能告诉我,怎么在我的__str__
方法里打印出self.deck
的值(也就是这个对象所指向的内容)?
3 个回答
0
Python的文档里有关于如何使用
__str__
的方法。
简单来说,当你执行:
print something
Python会调用something
的__str__
方法,然后把结果输出。
根据我的猜测,你可能想要打印出这个对象是一个牌组的事实。所以你可能想要这样的代码:
class Deck:
# ...
def __str__(self):
return "Deck()"
既然你在学习Python,我有一些建议:
- 正如@abarnert所说,当你在Python 2中写
class ABC:
时,它是一个旧式类。(更多信息可以在这里找到) - 虽然不是必须的,但在每个函数前面加个空行是个好习惯。
- 尽量避免使用单个字符的变量名。(比如
i
和j
)
所以,你的代码(应该)看起来像这样:
class Deck(object):
def __init__(self): # Blank line above...
self.deck = []
# Change variable names...
for suit in SUITS:
for rank in RANKS:
self.deck.append(Card(str(suit), str(rank)))
def deal_card(self): # Blank line above...
self.temp = random.randrange(0,52)
return(self.deck[self.temp])
def __str__(self):
return "Deck()"
最后,你可能还想看看这个,其实就是我之前提到的同一页面,重复了一次。
0
你也可以这样做:
def __str__(self):
return ','.join(str(x) for x in self.deck)
之后,牌组中的每一张卡片实例都需要重新定义它们自己的字符串表示方法,这样才能正确格式化显示。
3
只需要把它转换成一个字符串就可以了。
return str(self.deck)