如何解决使用 __str__ 和 __repr__ Python 方法从类方法中打印列表
首先,感谢您花时间考虑我的问题 - 我已经包含了很多代码,我当然感谢您的支持!
我写了两个类:
纸牌和纸牌
我想从 [Deck] 类的方法 [shuffle_deck] 中打印属性 [cards]。我在类中使用了 str 魔术方法,它允许我正确输出:
deck2 = Deck('♠')> deck2.shuffle_deck() > 打印(deck2)
但是当我尝试直接从该方法打印列表时它不起作用:
打印(deck2.cards)
我已经观看了几个 YouTube 视频,但仍然难以理解为什么会发生这种情况。我在这个论坛上阅读了很多帖子,但我找不到一个解决方案,特别关注打印类对象与类方法中的列表之间的对比。
再次感谢您的帮助!
class PlayingCard():
def __init__(self,value,suit):
if value in ['2','3','4','5','6','7','8','9','10','J','Q','K','A'] or value in [2,3,4,5,6,7,8,9,10,'A']:
self.rank = str(value)
else:
print("Invalid rank!")
raise Exception("Invalid rank!")
if suit in '♥♦♣♠':
self.suit = suit
else:
print('Invalid suit!')
raise Exception('Invalid suit!')
def get_rank(self):
return self.rank
def get_suit(self):
return self.suit
def __str__(self):
return self.rank+" of " +self.suit
class Deck():
ranks=[2,'A']
deck_cards=[]
def __init__(self,suit = ['♥','♦','♣','♠']):
self.suits = suit
for rank in Deck.ranks:
for suit in self.suits:
card = PlayingCard(rank,suit)
Deck.deck_cards.append(card)
self.cards=[]
for card in Deck.deck_cards:
if card.get_suit() == suit:
self.cards.append(card)
def shuffle_deck(self):
random.shuffle(Deck.deck_cards)
def deal_card(self,count):
deal_cards = []
if count <= len(self.cards):
deal_cards = random.sample(self.cards,count)
for card in deal_cards:
self.cards.remove(card)
deal_card_str=''
for card in deal_cards:
deal_card_str += card.__str__()+","
print(deal_card_str[:-2])
else:
print('Cannot deal '+str(count)+' cards. The deck only has '+str(len(self.cards))+' cards left!')
def __str__(self):
full_deck=''
for card in Deck.deck_cards:
full_deck += card.__str__()+","
return full_deck[:-2]
deck2 = Deck('♠')
deck2.shuffle_deck()
print("I want to change this output to match the lower output",deck2.cards)
print("This is the correct format",deck2)```
解决方法
它不起作用,因为deck2.cards 是一个列表,所以你需要遍历它,像这样:
deck2 = Deck('♠')
deck2.shuffle_deck()
print("I want to change this output to match the lower output"
print("{:s}".format(','.join(deck2.cards)))
print("This is the correct format",deck2)
(类似于你在 Deck 类中所做的)。这是有道理的,因为每个 PlayingCard 都是一张卡片的类实例,所以它无法将信息存储在多张卡片上,除非您已经这样做了。换句话说,PlayingCard 的 str 函数只能访问自己的数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。