Tigeroad 发表于 2020-5-24 17:25:36

第44讲 魔法方法的简单定制 str()和repr()的理解

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

首先有三点大神们的总结,这里拾人牙慧:
1)区别
__str__ 方法和 __repr__ 方法用途不一样,__str__ 方法当对象被 str() 或 print() 时调用,__repr__ 方法当对象被直接输出(在 IDLE Shell 中直接输出)或被 repr() 时调用。
(2)
(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)删除


以上为个人的浅显理解,希望能有帮助,欢迎批评指正!

永恒的蓝色梦想 发表于 2020-5-24 17:27:23

repr出来的值是给机器看的,括号中的任何内容出来后都是在它之上再加上一层引号这又是谁告诉你的

Tigeroad 发表于 2020-5-24 17:29:52

永恒的蓝色梦想 发表于 2020-5-24 17:27
这又是谁告诉你的

我在论坛的其他帖子里复制来的,请问有什么问题?

永恒的蓝色梦想 发表于 2020-5-24 17:31:44

Tigeroad 发表于 2020-5-24 17:29
我在论坛的其他帖子里复制来的,请问有什么问题?

这话说的模模糊糊,不清不楚,建议删去。

xiaosi4081 发表于 2020-5-24 17:31:46

Tigeroad 发表于 2020-5-24 17:29
我在论坛的其他帖子里复制来的,请问有什么问题?

额。。。。{:10_292:}

xiaosi4081 发表于 2020-5-24 17:32:45

Tigeroad 发表于 2020-5-24 17:29
我在论坛的其他帖子里复制来的,请问有什么问题?

把理解删了吧,同4楼

Tigeroad 发表于 2020-5-24 17:38:15

永恒的蓝色梦想 发表于 2020-5-24 17:31
这话说的模模糊糊,不清不楚,建议删去。

好的!可能我理解的也不够深,感觉挺有道理,不过请问,这句话有什么不对吗?可否举个例子?谢谢!

永恒的蓝色梦想 发表于 2020-5-24 17:41:53

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

请问“加个引号”是什么意思?

Tigeroad 发表于 2020-5-24 17:55:27

永恒的蓝色梦想 发表于 2020-5-24 17:41
请问“加个引号”是什么意思?

我的理解是讲输入的值转化为供解释器读取的形式,而这种形式通常是在字符串外加引号以和str()区分;比如print(repr('123456789'))输出‘123456789’,给解释器一个“输出这个字符串”的信息。不过“加个引号”确实有点笼统了,哈哈

冬雪雪冬 发表于 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有什么差别,当然用户也不会关心输出的是什么类型
第二个输出则能分辨出整数和字符串

永恒的蓝色梦想 发表于 2020-5-24 18:23:37

冬雪雪冬 发表于 2020-5-24 18:22
repr是给程序员看的,str是给最终用户看的。

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

是的。

_2_ 发表于 2020-5-24 18:45:06

永恒的蓝色梦想 发表于 2020-5-24 18:23
是的。

额,粗体字又越界了{:10_269:}

Tigeroad 发表于 2020-5-25 11:00:49

冬雪雪冬 发表于 2020-5-24 18:22
repr是给程序员看的,str是给最终用户看的。

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

谢谢!
页: [1]
查看完整版本: 第44讲 魔法方法的简单定制 str()和repr()的理解