返回带有新参数的构造函数是否会覆盖实例对象?

时间:2014-11-06 03:50:37

标签: python oop object return

我正在试图塑造一个醉酒的人走路。我希望他搬家。当我调用move时,我会告诉他通过返回一个新的位置移动到一个由X和Y坐标表示的新位置。

我无法直观地看到正在发生的事情。据推测,我需要初始化一个Location对象,如a = Location(1,2)。我是否打算移动物体?那么a.move(2,2)?并且该方法返回一个新的Location对象,其x和y值为1 + 2,2 + 2或3,4?我在这里覆盖了什么吗?

class Location(object):
    def __init__(self, x, y):
        """x and y are floats"""
        self.x = x
        self.y = y

    def move(self, deltaX, deltaY):
        """deltaX and deltaY are floats"""
        return Location(self.x+deltaX, self.y+deltaY)

1 个答案:

答案 0 :(得分:2)

  

据推测,我需要初始化一个像a = Location(1,2)这样的位置对象。

  

我是否打算移动物体?那么a.move(2,2)

  

该方法返回一个新的Location对象,其x和y值为1 + 2,2 + 2或3,4?

是的,用你编写方法的方式。

  

我在这里覆盖了什么吗?

不,不是你编写方法的方式。

你的方法并没有真正"移动" Location对象;它会创建一个具有不同xy的新的不同Location对象。这可能是也可能不是你想要的;这取决于你想做什么。

如果您想更新现有对象,您可以编写如下所示的方法:

def move(self, deltaX, deltaY):
    """deltaX and deltaY are floats"""
    self.x += deltaX
    self.y += deltaY

这确实会覆盖"对象的现有xy包含新值。