【Python面向对象】__repr__和__str__

本文介绍了Python中`__repr__`和`__str__`方法在实例对象描述和打印中的行为差异,以及如何确保正确地使用它们。作者通过Poker和Card类的例子展示了当这两个方法都被实现时,print()会优先调用哪个方法。
摘要由CSDN通过智能技术生成

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())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值