是否用新参数返回构造函数覆盖实例对象?

问题描述:

我想模拟一个喝醉的人走路。我想让他搬家。当我呼叫移动时,我会通过返回一个新的位置告诉他移动到由X和Y坐标表示的新位置。是否用新参数返回构造函数覆盖实例对象?

我很难想象发生了什么事情。大概我需要初始化一个Location对象,如= 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) 

大概我需要初始化一个位置的物体,像a = Location(1,2)

是的。

我是否打电话给对象?那么a.move(2,2)

是的。

而且该方法返回一个新的位置对象,其x和y值分别为1 + 2,2 + 2或3,4?

是的,用你写的方法。

我在这里覆盖的东西?

不,不是用你写的方法。

你的方法并没有真正“移动”Location对象;它会创建一个新的,不同的位置对象,其中包含不同的xy。这可能是也可能不是你想要的;这取决于你想要做什么。

如果您想更新现有的对象,你会写你的方法是这样的:

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

这的确会“覆盖”目标的现有xy用新值。

+0

谢谢!我习惯用Java中的增量来思考。整个初始化语法和调用本身不是构造器的东西(Java意义上的)让我混乱。 – 2014-11-06 04:29:18