python __str__() 和 __repr__()是干啥的

时间:2023-12-31 16:36:44

1. 没定义__str__() print的时候得不到自己想要的东西

python __str__()  和 __repr__()是干啥的

类默认转化的字符串基本没有我们想要的一些东西,仅仅包含了类的名称以及实例的 ID (理解为 Python 对象的内存地址即可)。虽说这总比没有好,但确实是没什么用处啊。

所以,我们可能会手动打印对象的一些属性或者是在类里自己实现一个方法来返回我们需要的信息

2.使用 __str__ 实现类到字符串的转化

python __str__()  和 __repr__()是干啥的

3.另一个就是 __repr__ 方法。后者的工作方式与前者类似,但是它被调用的时机不同

python __str__()  和 __repr__()是干啥的

另外,列表以及字典等容器总是会使用 __repr__ 方法。即使你显式的调用 str 方法,也是如此。

python __str__()  和 __repr__()是干啥的

如果我们需要显示的指定以何种方式进行类到字符串的转化,我们可以使用内置的 str() 或 repr() 方法,它们会调用类中对应的双下划线方法。

python __str__()  和 __repr__()是干啥的

4.__str__ 和 __repr__ 的差别是什么

__str__ 和 __repr__ 的差别究竟在哪里,它们的功能都是实现类到字符串的转化,它们的特定并没有体现出用途上的差异。

python __str__()  和 __repr__()是干啥的

因此,我们有个初步的答案。

__str__ 的返回结果可读性强。也就是说,__str__ 的意义是得到便于人们阅读的信息,就像上面的 '2018-04-03' 一样。

__repr__ 的返回结果应更准确。怎么说,__repr__ 存在的目的在于调试,便于开发者使用。细心的读者会发现将 __repr__ 返回的方式直接复制到命令行上,是可以直接执行的。

上面应该就是这两个方法的意义所在吧

5.自己写class的时候要加__repr__

如果你没有添加 __str__ 方法,Python 在需要该方法但找不到的时候,它会去调用 __repr__ 方法。因此,我推荐在写自己的类的时候至少添加一个 __repr__ 方法,这能保证类到字符串始终有一个有效的自定义转换方式。

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