Python:运算符重载意外输出?

时间:2015-10-23 20:37:25

标签: python python-2.7

 class point():
     def __init__(self,x=0,y=0):
         self.x=x
         self.y=y
     def __add__(self,other):
         x = self.x + other.x
         y = self.y + other.y
         return point(x,y)     

p1=point(3,6) 
p2=point(-1,4) 
print p1 
print p2 
d=p1+p2 
print 'the summation is',d

预期产出:

3,6
-1,4
2,10

实际输出:(不是真的,但提出要点)

<__main__.point instance at 0xdeadbeef1234>
<__main__.point instance at 0xdeadbeef1445>
<__main__.point instance at 0xdeadbeef1233>

2 个答案:

答案 0 :(得分:2)

班级工作正常;您只需定义一个__str__方法,以便在打印时看到类实例的默认表示以外的其他内容。一种可能性:

def __str__(self):
    return '({0}, {1})'.format(self.x, self.y)

即使没有,您也可以看到d是您想要的实例:

print d.x   # Outputs 2
print d.y   # Outputs 10

您可能还想为调试定义__repr__函数:

def __repr__(self):
    return 'Point(x={0}, y={1})'.format(self.x, self.y)

答案 1 :(得分:1)

你必须在你的类中使用 str 函数来查看值,否则它只会打印该实例的内存地址。

所以,最终的代码是:

class point():
    def __init__(self,x=0,y=0):
        self.x=x
        self.y=y

    def __str__(self):
        return 'point (%d, %d)' % (self.x, self.y)    

    def __add__(self,other):
        x = self.x + other.x
        y = self.y + other.y
        return point(x,y)     

p1=point(3,6) 
p2=point(-1,4) 
print p1 
print p2 
d=p1+p2 
print'the summation is',d