首页 > 解决方案 > 为什么要打印 s3 的对象地址?

问题描述

class A:
    def __init__(self,m1,m2):
        self.mrks1= m1
        self.mrks2 = m2
    def __add__(self,other)
        r1 = self.mrks1 +other.mrks1
        r2 = self.mrks2 + other.mrks2
s = A(r1,r2) 
return s

a1 = A(1,2)
a2 = A(2,3)
s3 = s1+s2
print(s3) 

s3 的对象地址被打印而不是添加对象

标签: pythonoperator-overloading

解决方案


你快到了,我会解释为什么你没有得到预期的输出。

您意识到,当您使用 + 对两个对象求和时,会在内部调用sum方法。

好吧,当你打印一个对象时,是一样的,但使用str方法!

class A:
def __init__(self,m1,m2):
    self.mrks1= m1
    self.mrks2 = m2
def __add__(self,other):
    r1 = self.mrks1 +other.mrks1
    r2 = self.mrks2 + other.mrks2
    self.mrks1= r1
    self.mrks2 = r2
    s = A(r1,r2) 
    return s
def __str__(self):
    return "Values are " + str(self.mrks1) + ' ' + str(self.mrks2)


s1 = A(1,2)
s2 = A(2,3)
s3 = s1+s2
print(s3) 

如果您在没有 __str __ 方法的情况下打印对象,那么打印是对象的默认方法!因此打印对象的地址,您需要通过声明 __ str __ 来覆盖它


推荐阅读