求教各位大佬,调用的方式是如何锚定?
求教各位大佬,调用的方式是如何锚定?
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)
首先来解释一下这个类的几个方法的作用:
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)。
页:
[1]