持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情
0 环境
- 编辑器:pycharm或者vscode
- 系统版本:windows10
- python版本:3.9.6
1 __str__的使用
当我们定义了一个类,调用它后,打印出来的结果如下图,<xxx ox....一串>,但是这并不是我们想要的,如下代码,要想得到初始化的a和b,怎么办,只能自己手动加,写多了,就会显得很麻烦,有么有一步到位的。
class Demo:
def __init__(self, a, b):
self.a = a + 1
self.b = b + 2
d = Demo(1, 2)
print(f'Demo结果 --> {d}')
print(f'Demo<{d.a}, {d.b}>')
如下图所示:我只需要在Demo里加个__str__的方法就可以了,返回的内容和刚刚打印Demo<xx>一样的即可。然后再次调用它,效果是一样的。
当我们的值发生的变化,在次调用它时,也是可以的。可能感觉就是少写点代码没啥太多的区别是不是,但是在我们调试的时候,非常有用的,最直观的就是这样可以少些好多代码,还有就是记录日志的好处,好辅助。
还有一种方式就是用format,我想出来的结果就是Demo1(1,2),就是想把它字符串格式化一下,可以用如下代码:
对象变字符串。
{!s}.format(Demo1(1,2))
有时候会看到repr方法,和str一模一样的内容,repr是给机器看的,而str是给人看的。一般只需要重写str即可,repr随意。但是源码里会两个都写,没办法记录的日志,总是要有用的吧,收集一堆它们的实例,毫无意义。有时会见到__repr__ = __str__,可以是一个方法。
2 总结
正常
__str__用在打日志或者调试的时候用到,打日志是为了记录,干了啥,假如不用__str__,而是打印一堆实例的话,人看不懂,那么日志就变的没有价值了。