2014-02-06 189 views
0

我试图定义运算符类型add当谈到我的class Point。 (x,y)正好是它的意思。我似乎无法让操作员工作,因为代码不断打印< 主要。点...>。我对这个东西很新,所以有人可以解释我做错了什么?谢谢。以下是我的代码:Python 3运算符超载

class Point: 
def __init__(self, x=0, y=0): 
    self.x = x 
    self.y = y 
def __add__(self, other): 
    return Point(self.x + other.x, self.y + other.y) 
p1 = Point(3,4) 
p2 = Point(5,6) 
p3 = p1 + p2 
print(p3) 
+0

_ “的代码保持打印''” _。听起来很正常。你期望它打印什么? – Kevin

回答

1

您的添加功能按预期工作。这是你的print这就是问题所在。你得到一个丑陋的结果,比如<__main__.Point object at 0x027FA5B0>,因为你没有告诉课堂你想如何显示自己。执行__str____repr__,以便它显示一个很好的字符串。

class Point: 
    def __init__(self, x=0, y=0): 
     self.x = x 
     self.y = y 
    def __add__(self, other): 
     return Point(self.x + other.x, self.y + other.y) 
    def __repr__(self): 
     return "Point({}, {})".format(self.x, self.y) 
p1 = Point(3,4) 
p2 = Point(5,6) 
p3 = p1 + p2 
print(p3) 

结果:

Point(8, 10)