鱼C论坛

 找回密码
 立即注册
查看: 159|回复: 6

作业题

[复制链接]
发表于 2024-4-8 22:05:24 | 显示全部楼层 |阅读模式

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

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

x
class C:
     def __init__(self, data=250):
         self.data = data
     def __str__(self):
         return f"data = {self.data}"
     def __repr__(self):
         return f"C({self.data})"
     def __add__(self, other):
         self.data += other
如果同时定义了 __repr__(self)和__str__(self),想要调用__repr__(),除了用repr(c)函数,还有什么办法?
@FishC

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-8 22:05:38 | 显示全部楼层
除了使用`repr(c)`函数,您还可以直接调用`c.__repr__()`方法来返回`__repr__()`方法的结果。例如:

  1. c = C()
  2. print(c.__repr__())
复制代码


输出结果将是`C(250)`。

不过需要注意的是,直接调用`__repr__()`方法并非一种常见的用法,一般情况下我们会使用`repr()`函数来获取对象的字符串表示。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-8 22:10:18 | 显示全部楼层
在idle编辑器模式有没有类似与交互模式下只输入对象c时,直接会调用__repr__(self)方法的操作?@FishC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-8 22:11:05 | 显示全部楼层
亦又 发表于 2024-04-08 22:10
在idle编辑器模式有没有类似与交互模式下只输入对象c ...


在IDLE编辑器模式下,如果你创建了一个对象c并直接输入c,是无法直接调用`__repr__(self)`方法的。此时,IDLE会默认调用内置的`__repr__()`方法,打印出对象的默认表示形式,类似于`<__main__.ClassName object at 0x00000123>`。

如果你想要在IDLE编辑器模式下也能直接调用`__repr__(self)`方法并打印出自定义的字符串表示形式,你可以执行以下操作:

  1. class ClassName:
  2.     def __repr__(self):
  3.         return "自定义的字符串表示形式"

  4. c = ClassName()  # 创建对象
  5. c  # 直接输入对象名,调用__repr__()方法并打印自定义的字符串表示形式
复制代码


这样,当你在IDLE编辑器中输入`c`并回车时,就会调用对象的`__repr__()`方法,并打印出你自定义的字符串表示形式。

希望这个解答能帮到你,如果你有任何疑问,请随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-8 22:15:20 | 显示全部楼层
在编辑器模式下,调用__repr__(self)方法的操作有哪些?@FishC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-8 22:15:42 | 显示全部楼层
亦又 发表于 2024-04-08 22:15
在编辑器模式下,调用__repr__(self)方法的操作有哪些 ...


在编辑器模式下,调用`__repr__(self)`方法的操作主要有以下几种:

1. 在交互式解释器中直接输入对象名并回车,会自动调用对象的`__repr__()`方法,返回表示对象的字符串。

例如:
  1. class Person:
  2.     def __init__(self, name):
  3.         self.name = name

  4.     def __repr__(self):
  5.         return f"Person('{self.name}')"

  6. p = Person('Alice')
  7. p  # 调用 p.__repr__() 方法
复制代码

输出:
  1. Person('Alice')
复制代码


2. 使用`print()`函数打印对象时,会自动调用对象的`__repr__()`方法,返回表示对象的字符串。

例如:
  1. class Person:
  2.     def __init__(self, name):
  3.         self.name = name

  4.     def __repr__(self):
  5.         return f"Person('{self.name}')"

  6. p = Person('Bob')
  7. print(p)  # 调用 p.__repr__() 方法并打印
复制代码

输出:
  1. Person('Bob')
复制代码


3. 使用`str()`函数将对象转换为字符串时,如果对象没有定义`__str__()`方法,则会调用对象的`__repr__()`方法。

例如:
  1. class Person:
  2.     def __init__(self, name):
  3.         self.name = name

  4.     def __repr__(self):
  5.         return f"Person('{self.name}')"

  6. p = Person('Charlie')
  7. s = str(p)  # 调用 p.__repr__() 方法并返回字符串
  8. print(s)
复制代码

输出:
  1. Person('Charlie')
复制代码


总之,在编辑器模式下,调用`__repr__(self)`方法的操作主要是直接使用对象名或通过`print()`函数打印对象。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-9 10:52:56 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 20:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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