Python 如何正确实施/过载“__报告;?
python新手,这可能是一个愚蠢的问题,但是如何正确实现repr方法呢 我编写了一个快速的小程序来模拟纸牌游戏,但我不知道该为repr方法编写什么。卡片类的repr方法非常简单,但我不知道如何处理DeckOfCards类以下是我的代码:Python 如何正确实施/过载“__报告;?,python,overloading,Python,Overloading,python新手,这可能是一个愚蠢的问题,但是如何正确实现repr方法呢 我编写了一个快速的小程序来模拟纸牌游戏,但我不知道该为repr方法编写什么。卡片类的repr方法非常简单,但我不知道如何处理DeckOfCards类以下是我的代码: import random class Card: '''Create a single card, by id number''' # Class variables, created once for the class suits = [ '\
import random
class Card:
'''Create a single card, by id number'''
# Class variables, created once for the class
suits = [ '\u2660', '\u2661', '\u2662', '\u2663' ]
ranks = [ 'A','2','3','4','5','6','7','8','9','10','J','Q','K' ]
def __init__(self, n=0):
# instance variables for _num, _rank, _suit, _value
if 0 <= n < 52:
self._num = n
self._rank = Card.ranks[n%13] # note referencing class vars
self._suit = Card.suits[n//13]
self._value = n%13 + 1
if self._rank == 'A':
self._value = 14
else: # invalid card indicators
self._rank = 'x'
self._suit = 'x'
self._value = -1
def __repr__(self):
return self._rank + self._suit
def __lt__(self,other):
return self._value < other._value
def __le__(self,other):
return self._value <= other._value
def __eq__(self,other):
return self._value == other._value
class DeckOfCards:
'''A Deck is a collection of cards'''
def __init__(self):
self._deck = [ Card(i) for i in range(52) ]
def __repr__(self):
return 'Deck : ', self._deck
def shuffle(self):
return random.shuffle(self._deck)
def deal_a_card(self, i=-1):
#that way player can choose where to draw from
return self._deck.pop(i)
def cards_left(self,count):
return len(self._deck)
new_deck = DeckOfCards()
随机导入
班级卡:
''根据id号创建一张卡''
#类变量,为类创建一次
西服=['\u2660'、'\u2661'、'\u2662'、'\u2663']
排名=[‘A’、‘2’、‘3’、‘4’、‘5’、‘6’、‘7’、‘8’、‘9’、‘10’、‘J’、‘Q’、‘K’]
定义初始化(自,n=0):
#_num、_rank、_suit、_value的实例变量
如果0\uuuu repr\uuuu
理想情况下可以返回用于创建此实例的对象的表示形式
发件人:
对于许多类型,此函数尝试返回一个字符串,该字符串在传递给eval()时将生成具有相同值的对象,否则表示形式是一个尖括号中的字符串,其中包含对象类型的名称以及通常包括对象名称和地址的附加信息
您应该返回字符串类型,例如在Deck中:
def __repr__(self):
...
return 'Deck : '+str(self._deck)
首先,需要注意的是,您不必实现\uuuu repr\uuu
方法。Python提供了一个合理的默认值(它至少会告诉您类型)
如果您想实现\uuuu repr\uuuu
,“经验法则”是,在有意义的地方,您应该提供有关对象的足够信息,以便用户可以重建它。在你的例子中,从一副牌到另一副牌似乎没有任何真正的区别,所以
def __repr__(self):
return 'Deck()'
可能是一个合理的返回值。这并不能正确地获得状态(洗牌后),但您没有提供用于在特定状态下构造组的接口。如果您这样做了,它可能看起来像:
def __repr__(self):
return 'Deck(%s)' % self._deck
我以前就是这样得到它的,但每次把它转换成字符串似乎都是浪费。但是,是的,那就可以了。标记回答的问题,这样人们就不会继续发布答案了。:)由于时间限制,回答得太快了。但我会的,谢谢!我知道默认方法,但我需要以特定的方式格式化它。