Python类:移动矩形

时间:2014-09-08 02:55:16

标签: python

你好我试图让这个矩形移动到某些坐标而不改变矩形的宽度和高度。当我使用__str__方法时,我得不到正确的答案。任何想法出了什么问题?这是我的代码

class Rectangle(object):
    def __init__(self,corner,width,height):
    self._x = corner[0]
    self._y = corner[1]
    self._width = width
    self._height = height

def get_bottom_right(self):
    self._width = self._x + self._width
    self._height = self._y + self._height
    return(self._width,self._height)

def move(self,p):
    self._p = self._x, self._y

def resize(self,width,height):
    resize = self._width + self._height
    return(resize)


def __str__(self):
    return '({0}, {1})'.format((self._x, self._y), (self._x + self._width, self._y + self._height))

3 个答案:

答案 0 :(得分:2)

我不确定您想要如何移动矩形,但我知道您的moveresize方法目前没有做任何事情。

目前,你要移动的方法是接受一个名为p的参数,然后它继续忽略。然后,它会在您的矩形内创建一个名为_p的新字段,并将_p设置为等于其x和y坐标。但是,这也是一个无用的操作,因为你永远不会最终使用_p,因为你从未结束实际移动变量。

相反,你可能想要做这样的事情:

def move(self, x, y):
    self._x = x
    self._y = y

现在,如果您执行my_rectangle.move(3, 4)my_rectangle的x和y坐标将更改为3和4。

如果p意味着像“点”对象,你可能想要这样做:

def move(self, p):
    self._x = p.x
    self._y = p.y

同样,您的“调整大小”方法没有做任何有意义的事情。调用它只会返回矩形的宽度和高度的总和,这并不意味着什么。您可能希望将其更改为:

def resize(self, width, height):
    self._width = width
    self._height = height

答案 1 :(得分:1)

您的move方法不会修改移动矩形的正确属性。您希望使用传入的self._p参数来修改pself._x,而不是分配到self._y

试试这个:

def move(self,p):
     self._x, self._y = p

这会将矩形移动到点p(假设p(x,y)元组)。如果您想通过 p移动,请尝试:

def move(self,p):
     self._x += p[0]
     self._y += p[1]

您在resize方法(您要修改self._widthself._height的位置)中遇到了类似的问题,而不是将它们一起添加并返回它们。 get_bottom_right方法存在相反的问题,因为它可能会修改self._widthself._height

答案 2 :(得分:1)

您的move()功能看起来不对。它需要一个名为p的参数(对于“对”,我假设),我认为它应该将矩形移动到那些坐标。但它根本没有改变self._xself._y。我认为你已经在这个函数中得到了你的任务,你可能想要这样做:

def move(self,p):
    self._x, self._y = p

如果p是一个元组((3,4)对)。如果它是具有xy属性的对象,您可能会这样做:

def move(self,p):
    self._x = p.x
    self._y = p.y

正如其他人已经指出的那样。

实际上,除了这个问题之外,您的代码还有其他几个问题。您的get_bottom_right()函数正在更改self._widthself._height的值,这不是您想要的,并且您的resize()函数不会更改self._widthself._height的价值。

...我看到其他人已经指出了move()resize()函数中的错误,因此我将解决get_bottom_right()函数问题。你可能想这样做:

def get_bottom_right(self):
    right = self._x + self._width
    bottom = self._y + self._height
    return (right,bottom)

请注意我是如何仅更改变量名称的,但保留了相同的代码。这将做你想要的,没有在这个过程中改变矩形的宽度和高度。每次调用get_bottom_right()时,原始代码都会更改宽度和高度。