2015-10-23 5 views
-3
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 

Ожидаемый результат:Python: оператор перегружает неожиданный вывод?

3,6 
-1,4 
2,10 

На самом деле выход: (не очень, но делает точка)

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

Исправьте код. Я не знаю, где должны идти эти последние строки. –

+0

@MorganThrapp - Разве они не будут идти на том же уровне, что и класс? –

+0

Что такое неожиданный результат? Какой результат вы ожидаете? – BrenBarn

ответ

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) 
+0

return '({0}, {1})'. Format (self.x, self.y) вы можете объяснить это более кратко. –

+0

'__str__' вызывается всякий раз, когда ваш объект передается функции' str', или когда он используется как аргумент функции печати. Метод 'format' просто использует свои аргументы для замены каких-либо' {} 'заполнителей в вызывающей строке. – chepner

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 
Смежные вопросы