通俗易懂的python魔法方法

  python的魔法方法类似于C++中的重载,在python中采用双下划线包围函数名的方法来实现对已有函数的重写,实现开发者想要的功能。python的魔法方法很多,这里直接可以参考https://fishc.com.cn/thread-48793-1-2.html总结的非常全面,这里不一一介绍。这篇博客主要是记录我学习过程遇到的问题,在这里总结一下__str____repr__两者的区别和联系。

问题的由来
  直接上一个例子,由下图可以看到,当我们想打印一个类时,只能看到类名+object at+地址的形式,当我们想查看类的属性时,当然也可以使用print(my_pool.length,my_pool.width)的形式来实现,但是在python中有更好的方法来实现,即采用魔法方法__str____repr__
在这里插入图片描述
__str__方法

  我们在上面类的基础上添加一个__str__方法,可以看到,当重新打印类时,就是开发者想要的输出结果,当然,如果想要将类转换成字符串时,也可以直接调用str()来实现,同样format()也适用。
在这里插入图片描述
__repr__方法

要想实现上面的功能,同样也可以使重写repr方法,在之前基础上,添加了一些调用信息可以更好的知道在使用那些语句时调用的什么方法。
在这里插入图片描述
__str____repr__的区别

通过上面的例子其实可以初步看出这两者的功能都是用来实现类到字符串的转换,但是两者还是存在区别,下面再用一个例子来说明其区别
在这里插入图片描述
从上述结果可以看出:
__str__的返回结果可读性强,也就是便于读者理解
__repr__的返回结果更加准确,便于开发者调试

总结

  • 我们可以使用 __str____repr__ 方法定义类到字符串的转化方式,而不需要手动打印某些属性或是添加额外的方法。
  • 一般来说,__str__ 的返回结果在于强可读性,而 __repr__的返回结果在于准确性。
  • 我们至少需要添加一个 __repr__方法来保证类到字符串的自定义转化的有效性,__repr__ 是可选的。因为默认情况下,在需要却找不到 __str__方法的时候,会自动调用 __repr__ 方法。

参考链接:https://baijiahao.baidu.com/s?id=1596817611604972751&wfr=spider&for=pc

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值