【问题标题】:why does object address of s3 gets printed?为什么要打印 s3 的对象地址?
【发布时间】:2021-07-08 06:27:40
【问题描述】:
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 的对象地址而不是添加对象

【问题讨论】:

    标签: python operator-overloading


    【解决方案1】:

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

    您意识到,当您用 + 对两个对象求和时,会在内部调用 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 __

    来覆盖它

    【讨论】:

    • @Dharman 感谢您消除疑问,但是当我使用此方法时,A 类: def __init__(self,m1,m2): self.mrks1= m1 self.mrks2 = m2 def __add__(self, other): return self.mrks1+ other.mrks1 , self.mrks2 + other.mrks2 s1 = A(1,2) s2 = A(2,3) s3 = s1+s2 print(s3) 然后我得到直接 O/P作为 (3,3) 即添加 s1 和 s2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多