鱼C论坛

 找回密码
 立即注册
查看: 2345|回复: 12

[技术交流] 第44讲 魔法方法的简单定制 str()和repr()的理解

[复制链接]
发表于 2020-5-24 17:25:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Tigeroad 于 2020-5-24 17:41 编辑

首先有三点大神们的总结,这里拾人牙慧:
1)区别
__str__ 方法和 __repr__ 方法用途不一样,__str__ 方法当对象被 str() print() 时调用__repr__ 方法当对象被直接输出(在 IDLE Shell 中直接输出)或被 repr() 时调用。
2[b]
(2)本题定义原因
一般使用 str() 函数,不使用repr() 函数。但按照本题的要求, __repr__ 方法也需要定义。


所以,小甲鱼老师分别定义__str__和__repr__的目的我注释在代码中:
    #用print()输出实例化的对象时,输出的为prompt(计时的结果)
    def __str__(self):
        return self.prompt

    #使直接在IDLE输入t1时,与print(t1)相同
    __repr__ = __str__

大家注意到了,我们已经定义
def __str__(self):
        return self.prompt
这里__str__(self)中self就是实例化的对象,输入t1即可显示prompt的结果,所以在后面的计算函数__calc()里小甲鱼老师就将打印print(self.prompt)删除


以上为个人的浅显理解,希望能有帮助,欢迎批评指正!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-24 17:27:23 | 显示全部楼层
repr出来的值是给机器看的,括号中的任何内容出来后都是在它之上再加上一层引号
这又是谁告诉你的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 17:29:52 | 显示全部楼层

我在论坛的其他帖子里复制来的,请问有什么问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 17:31:44 | 显示全部楼层
Tigeroad 发表于 2020-5-24 17:29
我在论坛的其他帖子里复制来的,请问有什么问题?

这话说的模模糊糊,不清不楚,建议删去。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 17:31:46 | 显示全部楼层
Tigeroad 发表于 2020-5-24 17:29
我在论坛的其他帖子里复制来的,请问有什么问题?

额。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 17:32:45 | 显示全部楼层
Tigeroad 发表于 2020-5-24 17:29
我在论坛的其他帖子里复制来的,请问有什么问题?


把理解删了吧,同4楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 17:38:15 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-24 17:31
这话说的模模糊糊,不清不楚,建议删去。

好的!可能我理解的也不够深,感觉挺有道理,不过请问,这句话有什么不对吗?可否举个例子?谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 17:41:53 | 显示全部楼层
Tigeroad 发表于 2020-5-24 17:38
好的!可能我理解的也不够深,感觉挺有道理,不过请问,这句话有什么不对吗?可否举个例子?谢谢!

请问“加个引号”是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 17:55:27 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-24 17:41
请问“加个引号”是什么意思?

我的理解是讲输入的值转化为供解释器读取的形式,而这种形式通常是在字符串外加引号以和str()区分;比如print(repr('123456789'))输出‘123456789’,给解释器一个“输出这个字符串”的信息。不过“加个引号”确实有点笼统了,哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 18:22:34 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-24 17:31
这话说的模模糊糊,不清不楚,建议删去。

repr是给程序员看的,str是给最终用户看的。
>>> a = 3
>>> b = '3'
>>> print('%d, %s'%(a, b))
3, 3
>>> print('%d, %r'%(a, b))
3, '3'
第一个输出看不出3和3有什么差别,当然用户也不会关心输出的是什么类型
第二个输出则能分辨出整数和字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 18:23:37 | 显示全部楼层
冬雪雪冬 发表于 2020-5-24 18:22
repr是给程序员看的,str是给最终用户看的。

第一个输出看不出3和3有什么差别,当然用户也不会关心输 ...

是的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 18:45:06 From FishC Mobile | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-24 18:23
是的。

额,粗体字又越界了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 11:00:49 | 显示全部楼层
冬雪雪冬 发表于 2020-5-24 18:22
repr是给程序员看的,str是给最终用户看的。

第一个输出看不出3和3有什么差别,当然用户也不会关心输 ...

谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-21 01:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表