你好我试图让这个矩形移动到某些坐标而不改变矩形的宽度和高度。当我使用__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))
答案 0 :(得分:2)
我不确定您想要如何移动矩形,但我知道您的move
和resize
方法目前没有做任何事情。
目前,你要移动的方法是接受一个名为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
参数来修改p
和self._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._width
和self._height
的位置)中遇到了类似的问题,而不是将它们一起添加并返回它们。 get_bottom_right
方法存在相反的问题,因为它可能会修改self._width
和self._height
。
答案 2 :(得分:1)
您的move()
功能看起来不对。它需要一个名为p
的参数(对于“对”,我假设),我认为它应该将矩形移动到那些坐标。但它根本没有改变self._x
或self._y
。我认为你已经在这个函数中得到了你的任务,你可能想要这样做:
def move(self,p):
self._x, self._y = p
如果p是一个元组((3,4)
对)。如果它是具有x
和y
属性的对象,您可能会这样做:
def move(self,p):
self._x = p.x
self._y = p.y
正如其他人已经指出的那样。
实际上,除了这个问题之外,您的代码还有其他几个问题。您的get_bottom_right()
函数正在更改self._width
和self._height
的值,这不是您想要的,并且您的resize()
函数不会更改self._width
和self._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()
时,原始代码都会更改宽度和高度。