repr:代表
如果同时实现了__repr__与__str__:
那么print()语句, 会调用__str__方法的实现
直接输入实例对象,会调用__repr__方法的实现
如果要对对象进行描述,我们应该同时添加__repr__与__str__方法
如果__repr__
与__str__
都不实现,那么print()
语句会打印内存地址
以下是一个定义扑克牌的类
class Card:
def __init__(self, suite, face):
self.suite = suite
self.face = face
def show(self):
suites = ['♠', '♥', '♦', '♣']
faces = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
return f'{suites[self.suite]}{faces[self.face]}'
# 为了区分调用了哪一个方法,用r 和 p来标记
def __repr__(self):
return 'r' + self.show()
def __str__(self):
return 's' + self.show()
class Poker:
def __init__(self):
self.cards = [Card(s, f) for s in range(4) for f in range(13)]
self.ptr = 0
def show(self):
return self.cards
# 如果同时实现了__repr__与__str__:
# 那么print()语句, 会调用__str__方法的实现
# 直接输入实例对象,会调用__repr__方法的实现
# 如果要对对象进行描述,我们应该同时添加__repr__与__str__方法
card = Card(0, 0)
# 这里调用了__str__方法
print(card)
poker = Poker()
# 这里是直接展示实例对象,所以调用的是__repr__方法
print(poker.show())