2016-10-22 4 views
0

У меня проблема с задачей для школы. Я хочу, чтобы мой последний метод проверял, совпадают ли два прямоугольника. Единственная проблема заключается в том, что я не могу отличить две разные высоты, широты и другую точку (это левая нижняя угловая точка прямоугольника) двух разных прямоугольников, любой совет?Python: как я могу различать две переменные двух разных объектов одного и того же класса?

спасибо

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

class Rectangle(): 
    def __init__(self,Point,w,h): 
     self.Point=Point 
     self.widith=w**strong text** 
     self.height=h 

    def same(self,Rectangle): 
     if Rectangle.self.Point==self.Point and Rectangle.self.widith==self.widith and Rectangle.self.height==self.height: 
      return True 
     else: 
      return False 
+0

я бы не использовать такое же имя для '' Point' аргумента (__init __ (я, точка ...) 'и' класс Point' (я бы сделал '__init __ (самоощущение, точки, w, h)). Затем я обращусь к методу '__eq__' (https://docs.python.org/2/reference/datamodel.html#object.__eq__) класса. Если вы перезапишите его в своих классах «Точка» и «Прямоугольник», вы можете использовать 'rectangle1 == rectangle2' – BorrajaX

ответ

2

Прежде всего не использовать то же имя для функции Params и классов. Это делает код запутанным и подверженным ошибкам. Попробуйте это:

class Rectangle: 
    def __init__(self, point, width, height): 
     self.point = point 
     self.widith = width 
     self.height = height 

Теперь я предполагаю, что point переменная является экземпляром класса Point. В этом случае сравнение одной точки с другой через == завершится неудачно, потому что по умолчанию == проверяет, совпадают ли два объекта в том смысле, что они являются одним и тем же объектом в памяти.

Таким образом, ваш implemenatation из same метода может выглядеть следующим образом:

def same(self, other): 
    return (
     self.point.x == other.point.x 
     and self.point.y == other.point.y 
     and self.width == other.width 
     and self.height == other.height 
    ) 

Если вы перезапись встроенные __eq__ метод (который отвечает за поведение == оператора) на Point класса, как это:

class Point: 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 
    def __eq__(self, other): 
     return self.x == other.x and self.y == other.y 

then same способ может быть упрощен до:

def same(self, other): 
    return (
     self.point == other.point # now __eq__ will be called here 
     and self.width == other.width 
     and self.height == other.height 
    ) 
+0

Спасибо, человек, который сделал это для меня. –

Смежные вопросы