鱼C论坛

 找回密码
 立即注册
查看: 2084|回复: 1

[已解决]求教各位大佬,调用的方式是如何锚定?

[复制链接]
发表于 2023-3-24 11:27:09 | 显示全部楼层 |阅读模式

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

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

x

求教各位大佬,调用的方式是如何锚定?

class C:
    def __init__(self,data):
        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

        
c = C(250)
print(c)                               #为什么直接打印会调用__str__()
data = 250
c                                      #为什么直接访问会调用__repr__()
C(250)
c+250                             #为会么+号会调用__add__()
print(c)
data = 500
c
C(500)


            














最佳答案
2023-3-24 11:42:02
首先来解释一下这个类的几个方法的作用:

1、__init__ 是构造方法,用于初始化对象。
2、__str__ 是用于返回对象的字符串表示,通常用于描述性输出。
3、__repr__ 是用于返回对象的官方字符串表示,通常用于调试和开发。
4、__add__ 是用于定义对象的加法操作。
现在来解答你的问题:

当你使用 print(c) 时,由于 print 函数会将对象转换为字符串,所以会调用 __str__ 方法。

当你直接在交互式环境中输入变量名(如 c),解释器会尝试显示变量的官方字符串表示。在这种情况下,它会调用 __repr__ 方法。

当你执行 c + 250 时,由于 C 类定义了 __add__ 方法,所以解释器会调用这个方法来处理加法操作。在这个例子中,__add__ 方法会将 other 的值(即 250)加到 self.data 上。

最后,print(c) 的输出和第一次输出的原因相同,是因为调用了 __str__ 方法。但这次由于 __add__ 方法的调用,c.data 的值已经被修改为 500,因此输出为 data = 500。

同样地,直接访问 c 会调用 __repr__ 方法,输出为 C(500)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-24 11:42:02 | 显示全部楼层    本楼为最佳答案   
首先来解释一下这个类的几个方法的作用:

1、__init__ 是构造方法,用于初始化对象。
2、__str__ 是用于返回对象的字符串表示,通常用于描述性输出。
3、__repr__ 是用于返回对象的官方字符串表示,通常用于调试和开发。
4、__add__ 是用于定义对象的加法操作。
现在来解答你的问题:

当你使用 print(c) 时,由于 print 函数会将对象转换为字符串,所以会调用 __str__ 方法。

当你直接在交互式环境中输入变量名(如 c),解释器会尝试显示变量的官方字符串表示。在这种情况下,它会调用 __repr__ 方法。

当你执行 c + 250 时,由于 C 类定义了 __add__ 方法,所以解释器会调用这个方法来处理加法操作。在这个例子中,__add__ 方法会将 other 的值(即 250)加到 self.data 上。

最后,print(c) 的输出和第一次输出的原因相同,是因为调用了 __str__ 方法。但这次由于 __add__ 方法的调用,c.data 的值已经被修改为 500,因此输出为 data = 500。

同样地,直接访问 c 会调用 __repr__ 方法,输出为 C(500)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-30 02:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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