Python的__str__方法

python 中的魔法方法:str 和__repr__

  1. 引言在学习面向对象的时候,我们知道在 python 中有一类特殊的方法,叫做魔法方法,这种方法的特点如下: 1. 方法定义的时候以两个下划线开头和两个下划线结尾:如__init__、str__和__repr 2. 这类方法一般不需要我们手动调用,在满足某个条件的时候会自动调用,这个满足的条件我们可以成为调用时机。在Python 中有两个魔法方法都是用来描述对象信息的,str__和__repr,那为什么要定义两个这样的方法呢,其实是他们设计的目的是不一样的: 1. __repr__的目标是准确性,或者说,__repr__的结果是让解释器用的。
  2. str__的目标是可读性,或者说,str__的结果是让人看的。
    . 分析那下边,我们详细的来看一下,他们的用法: 在不重写__str
    repr__的情况下,打印对象的输出结果不太友好,是对象的内存地址,即 id 的结果。# 定义 Person 类class Person(object): def init(self, name): self.name = namep = Person(“isaac”)以下为测试输出的结果:>>> print§<main.Person object at 0x10f29b940>>>> p<main.Person object at 0x10f29b940>>>> p.str()’<main.Person object at 0x10f29b940>’>>> p.repr()’<main.Person object at 0x10f29b940>'这样的输出结果,并不是我们想要的结果,此时我们重写__strrepr__方法。2.1 重写__str 方法# 定义 Person 类class Person(object): def init(self, name): self.name = name def str(self): return “str 方法 " + self.namep = Person(“isaac”)以下为测试结果:>>> print§str 方法 isaac>>> str§‘str 方法 isaac’>>> f”{p}"‘str 方法 isaac’>>> p.str()‘str 方法 isaac’>>> p<demo.Person object at 0x10e0e3588>此时我们发现在使用 print 打印对象、对象的格式化输出以及调用 str 方法,调用的都是__str__方法。但在交互环境下,直接输出 对象的时候,没有调用__str
    方法,输出的结果仍然是 id 的结果。2.2 重写__repr__ 方法# 定义 Person 类class Person(object): def init(self, name): self.name = name def str(self): return "str 方法 " + self.name def repr(self): return "repr 方法 " + self.namep = Person(“isaac”)此时,我们再来看输出的结果,>>> p__repr__ 方法isaac>>> p.repr()‘repr 方法isaac’>>> print§str 方法 isaac通过简单的对比,我们发现,在交互环境下,直接输出对象,调用的__repr__ 方法。 另外还需要注意的是,如果将对象放在容器中进行输出,调用的是__repr__ 方法。>>> [p][repr 方法 isaac]>>> §repr 方法 isaac>>> {“1”:p}{‘1’: repr 方法 isaac}>>> print([p])[repr 方法 isaac]3. 总结Python 中的__str__ 和 __repr__方法都是用来显示的,即描述对象信息的。 1. __str__的目标是可读性,或者说,__str__的结果是让人看的。主要用来打印,即 print 操作, 2. __repr__的目标是准确性,或者说,__repr__的结果是让解释器用的。__repr__用于交互模式下提示回应, 3. 如果没有重写__str__方法,但重写了__repr__方法时,所有调用__str__的时机都会调用__repr__方法。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我要变胖哇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值