鱼C论坛

 找回密码
 立即注册
查看: 2479|回复: 8

[已解决]0基础入门python 第45课---魔法方法:简单定制

[复制链接]
发表于 2020-2-9 11:03:59 | 显示全部楼层 |阅读模式

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

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

x
为什么在代码中要修改两个函数,如下

   def __repr__(self):
        return self.prompt

    __repr__ = __str__

但是我觉得修改一个就够了啊,直接把__repr__改了不就行了吗?
为什么要多此一举

def __repr__(self):
        return self.prompt

如上修改代码也能正常运行
最佳答案
2020-2-9 11:39:03
本帖最后由 dlnb526 于 2020-2-9 11:40 编辑
我就是猛辣 发表于 2020-2-9 11:30
。。。我意思是 ’__repr__‘ 方法也能print(a)这么用。。
然后我的问题是好像没必要用到 ‘__str__’  ...


  • 默认情况下,__repr__() 会返回和调用者有关的 “类名+object at+内存地址”信息。当然,我们还可以通过在类中重写这个方法,从而实现当输出实例化对象时,输出我们想要的信息。
  • 当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据


emmm你不就是在实践魔法方法:简单定制的内容么~~在这个例子里他们俩确实是一样啊,这样相同的赋值一般是在改变了__repr__()或__str__()后统一return的内容,可以当作输入习惯吧~以免程序出现其他错误。。。。。。

所以我没有弄懂你想说的,对不起。

你是说这个程序有更好的方法~~emmm好,你说得对,每个人的编程习惯不一样。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-9 11:09:19 | 显示全部楼层
本帖最后由 dlnb526 于 2020-2-9 11:10 编辑

__repr__和 __str__ 是两个不同的方法,在不同情况下起作用
观察下面两个的例子,是小甲鱼课上讲的。

认真听课做笔记哦

  1. class A():
  2.     def __repr__(self):
  3.         return " hahah"

  4. >>>a=A()
  5. >>a
  6. hahah
复制代码

  1. class A():
  2.     def __str__(self):
  3.         return " hahah"

  4. >>>a=A()
  5. >>print(a)
  6. hahah
复制代码


希望能帮助到你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-9 11:15:25 | 显示全部楼层
dlnb526 发表于 2020-2-9 11:09
__repr__和 __str__ 是两个不同的方法,在不同情况下起作用
观察下面两个的例子,是小甲鱼课上讲的。

这个我知道啊,我测试了__repr__方法,不仅直接调用a可以返回,print(a)也行,也就是说完全没必要用到__str__啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-9 11:15:39 From FishC Mobile | 显示全部楼层
dlnb526 发表于 2020-2-9 11:09
__repr__和 __str__ 是两个不同的方法,在不同情况下起作用
观察下面两个的例子,是小甲鱼课上讲的。


我认为你这个例子并无法阐明它俩的区别
尤其是你在>>>下演示,更是如此
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-9 11:17:07 | 显示全部楼层
本帖最后由 我就是猛辣 于 2020-2-9 11:19 编辑
dlnb526 发表于 2020-2-9 11:09
__repr__和 __str__ 是两个不同的方法,在不同情况下起作用
观察下面两个的例子,是小甲鱼课上讲的。


def __str__(self):
        return self.prompt

    __repr__ = __str__

小甲鱼这样写其实不就是
def__repr__(self):
        return self.prompt   的意思嘛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-9 11:19:58 | 显示全部楼层
我就是猛辣 发表于 2020-2-9 11:17
def __repr__(self):
        return self.prompt

__repr__和 __str__ 分别对应直接调用属性值和调用print()函数时的行为,在这个例子里确实一样,因为默认就是return balablab
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-9 11:24:12 | 显示全部楼层
本帖最后由 dlnb526 于 2020-2-9 11:26 编辑
我就是猛辣 发表于 2020-2-9 11:17
def __str__(self):
        return self.prompt


补充例子:
  1. class A():
  2.     def __repr__(self):
  3.         return " hahah321"
  4.     def __str__(self):
  5.         return " hahah123"
  6.         

  7. a=A()

  8. a                #直接调用a
  9. >>>hahah321

  10. print(a)           #打印a
  11. >>> hahah123
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-9 11:30:15 | 显示全部楼层

。。。我意思是 ’__repr__‘ 方法也能print(a)这么用。。
然后我的问题是好像没必要用到 ‘__str__’ 。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-9 11:39:03 | 显示全部楼层    本楼为最佳答案   
本帖最后由 dlnb526 于 2020-2-9 11:40 编辑
我就是猛辣 发表于 2020-2-9 11:30
。。。我意思是 ’__repr__‘ 方法也能print(a)这么用。。
然后我的问题是好像没必要用到 ‘__str__’  ...


  • 默认情况下,__repr__() 会返回和调用者有关的 “类名+object at+内存地址”信息。当然,我们还可以通过在类中重写这个方法,从而实现当输出实例化对象时,输出我们想要的信息。
  • 当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据


emmm你不就是在实践魔法方法:简单定制的内容么~~在这个例子里他们俩确实是一样啊,这样相同的赋值一般是在改变了__repr__()或__str__()后统一return的内容,可以当作输入习惯吧~以免程序出现其他错误。。。。。。

所以我没有弄懂你想说的,对不起。

你是说这个程序有更好的方法~~emmm好,你说得对,每个人的编程习惯不一样。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-3 18:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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